C와 외래 키 제약 조건이 둘 다 관련없는 두 개의 테이블 A와 B가 있습니다. A 또는 B 중 하나가 포함되어 있는지 확인하는 SQL 쿼리를 실행해야합니다. 주어진 id의 C입니다. 첫 번째 방법은 A와 B를 모두 사용하는 것이었지만 A와 B는 관련이 없으므로 작동하지 않습니다.하나의 테이블에 column = x가있는 행이 있는지 확인하기위한 단일 SQL 쿼리
아이디어가 있으십니까?
C와 외래 키 제약 조건이 둘 다 관련없는 두 개의 테이블 A와 B가 있습니다. A 또는 B 중 하나가 포함되어 있는지 확인하는 SQL 쿼리를 실행해야합니다. 주어진 id의 C입니다. 첫 번째 방법은 A와 B를 모두 사용하는 것이었지만 A와 B는 관련이 없으므로 작동하지 않습니다.하나의 테이블에 column = x가있는 행이 있는지 확인하기위한 단일 SQL 쿼리
아이디어가 있으십니까?
100 % 확신 할 수 없지만 C의 ID와 일치하는 A와 B의 요소를 반환하려는 경우이 작업을 수행합니다.
Select c.*, a.*, b.*
From c.id
Left Outer Join a On a.id = c.id
Left Outer Join b On b.id = c.id
Where c.id = @somevalue and (a.id Is Not Null or b.id Is Not Null)
여기서 @somevalue는 찾고있는 값입니다.
성능 현명한, 항상 액세스 할 수있는 int 테이블 'a', 'b'및 'c'가되므로 최상의 솔루션은 아닙니다. 'c'에 전혀 액세스 할 필요가 없으며 'a'에 액세스하고 'a'가 일치하지 않는 경우에만 'b'에 액세스 할 수 있습니다 (또는 그 반대). –
흥미로운 점 - 염두에 두어야 할 가치가 있습니다. –
Select 1
From DUAL
Where Exists (Select null From Table_A Where a.fk = :id) OR
Exists (Select null From Table_B Where b.fk = :id);
"from dual"은 "from table_c"보다 좋을 것입니다. 그렇지 않으면 조건을 지정하지 않았으므로 table_c의 각 행에 대해 하나의 결과 행을 얻습니다. – araqnid
좋은 지적. FROM에 대해 정말로 생각하지 않았습니다 –
FTFY ........... –
실제로 조합을 사용할 수 있습니까? 하지만 UNION이 아닌 UNION ALL을 사용해야하는 이유는 무엇입니까? 하나의 공통 항목을 선택하면됩니다.
SELECT 1
FROM
(select A.fk from A inner join C on A.FK = C.pk
UNION
select B.fk from B inner join C on B.FK = C.pk) AS bothTables
WHERE fk = 'desiredValue';
이것은 올바르게 작동합니다.
MySQL의 다음 표에서 myValue = 1로 테스트하여 검증했습니다.
mysql> select * from A;
+------+--------+------+
| pk | value | fk |
+------+--------+------+
| 1 | ape | 2 |
| 2 | fjfjfj | 3 |
+------+--------+------+
2 rows in set (0.00 sec)
mysql> select * from B;
+------+--------+------+
| pk | value | fk |
+------+--------+------+
| 1 | katt | 1 |
| 2 | fjfjfj | 3 |
+------+--------+------+
2 rows in set (0.00 sec)
mysql> select * from C;
+------+-------+
| pk | value |
+------+-------+
| 1 | hei |
| 2 | nei |
| 3 | jeg |
+------+-------+
3 rows in set (0.00 sec)
"A 또는 B 중 하나가 포함 된 경우"는 무엇을 의미합니까? 달성하려는 결과물은 무엇입니까? –
A.someFK 또는 B.someFK = 제공된 값이면 1을 반환하고 싶습니다. jdbc를 통해 두 개의 쿼리를 실행할 수 있고 Java의 로직을 수행 할 수 있지만 훨씬 더 명확한 JDBC 쿼리가 하나만있을 수 있습니다. – benstpierre