우선 스키마는 내 것이 아닙니다. 그것은 끔찍하고 혼란 스럽습니다. 그리고 경고 - 이것은 복잡합니다.WHERE의 결과에 기반한 INSERT INTO JOIN
나는 3 개의 테이블 - tbl_a
, tbl_b
및 tbl_c
을 가지고 있습니다. switch
은 실제로 엔터티 (레코드)의 속성 인 tbl_a
입니다. 그러나 다음 tbl_c
tbl_b
에 JOIN
및 통해서만 접근 :
+---------+ +---------+ +---------+
| tbl_a | | tbl_b | | tbl_c |
+---------+ +---------+ +---------+
| a_id | +--> | b_id | +--> | c_id |
| b_fk | <--+ | c_fk | <--+ | switch |
+---------+ +---------+ +---------+
+---------+
| tbl_his |
+---------+
| his_id |
| a_fk |
| coef |
+---------+
내가 네 번째 테이블 (tbl_his
)을 만들 필요가 기능을 추가하려면 - 내가 했어요. 이 테이블에는 coef
열이 있으며 1에서 100까지의 숫자를 사용할 수 있습니다. tbl_a
레코드 당 tbl_his
레코드 하나를 채워야합니다. 현재 데이터가 switch
이면 0
또는 1
입니다. 기록을 위해 스위치가 1
인 경우 0
의 관련 switch
와 tbl_a
의 각 레코드에 대한
tbl_his
에 다음 레코드를 추가해야
NULL, 'a_id', '100'
로 tbl_his
에 레코드를 추가해야합니다 :
NULL, 'a_id', '50'
이 쿼리는 작업의 절반을 수행합니까? 50
레코드와 100
레코드를 한 번에 수행하는 방법은 무엇입니까?
INSERT INTO `tbl_his` (`his_id`, `a_fk`, `coef`) VALUES (NULL, 'tbl_a.id', '100')
WHERE (
SELECT tbl_a.id
FROM tbl_a
LEFT JOIN tbl_b ON tbl_a.b_fk = tbl_b.id
LEFT JOIN tbl_c ON tbl_b.c_fk = tbl_c.c_id
WHERE tbl_c.switch = '0')
구문이 유효하지 않습니다. VALUES()리스트 다음에'WHERE'가 없어야합니다. 또한'FROM \'tbl_a'에 역 인용 부호가 없습니다. –