单个SQL查询,以检查其中一个表是否包含column = x的行

时间:2010-02-09 19:07:33

标签: sql oracle

我有两个不相关的表A和B,它们都对C有外键约束。我需要运行一个sql查询来确定A或B是否包含给定的C的ID。我的第一种方法是使用union all但A和B没有关系因此它不起作用。

有什么想法吗?

3 个答案:

答案 0 :(得分:5)

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 );

答案 1 :(得分:2)

你确实可以使用工会,为什么不呢?但为什么要使用UNION ALL,而不仅仅是UNION?只需选择一个常用列:

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)

答案 2 :(得分:1)

不是100%肯定你在问什么,但如果你想要返回A和B中与C中的id相匹配的元素,那么这样就可以了。


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是您正在寻找的值。