2017-12-29 20 views
0

상황 : 3 개의 테이블 (예 : 열 주소) 중에서 고유해야하는 열만있는 3 개의 테이블 (완전히 다른 열 유형/번호).Mysql : 3 개의 다른 테이블에서 열의 중복 값을 확인하십시오.

내가 3 개 테이블 중 하나에 새 레코드를 삽입 할 때, 나는 값 주소는 이미 3 개 테이블에서의 사용을하지 않을 경우

id | column1 | column2 | address | 
-------------------------------- 
1 | ...  | ...  | 1  | 
2 | ...  | ...  | 2  | 
2 | ...  | ...  | 5  | 
을 확인해야

표 2

id | column1 | address | 
------------------------ 
1 | ...  | 3  | 
2 | ...  | 4  | 
2 | ...  | 10  | 

표 3

WHERE a.address = '1'이 한정 testtabella1로부터 1

SELECT COUNT(a.address) AS cont1, (SELECT COUNT(b.address) FROM testtabella2 AS b WHERE b.address = '1' LIMIT 1) AS cont2, (SELECT COUNT(c.address) FROM testtabella3 AS c WHERE c.address = '1' LIMIT 1) AS cont3 

:

25,이 검사를 위해,이 검색어를 사용 MYNEWADDRESS = 1

enter image description here 경우

이렇게하면 3 카운트 중 하나가 1이면 MYNEWADDRESS가 이미 사용되었음을 의미합니다.

더 최적화 된 것을 할 수 있습니까? UNION, JOIN?

답변

1

데이터 디자인이 매우 좋지 않은 것 같습니다. 해당 테이블에 대한 고유 제한 조건이있는 주소에 대해 단일 테이블을 가져야합니다.

select (exists (select 1 from table1 t where t.address = 1) or 
     exists (select 1 from table2 t where t.address = 1) or 
     exists (select 1 from table3 t where t.address = 1) 
     ) as already_exists_flag 
+0

열 주소는 3 개 테이블 – Whiteboard

+0

@Whiteboard에서 UNIQUE이다 : 그것은 가장 효율적인 방법은 각 테이블에 고유 제한 조건을 정의 할 수 후 할 것이라고 말했다. . . 열이'unique'로 정의되면 고유 색인이 생깁니다. –