2012-11-13 52 views
0

OK,我有两个MySQL表:查询,如果一个外键设置

表A包含以下几列:idTableAidTableB_FK

表B包含以下几列:idTableB and idTableA_FK

个的关系如下:

  1. 1对许多从表A表B到关系(TableA.idTableA是 的PK和FK该关系是TableB.idTableA_FK

  2. 一对1表A表B和之间关系(TableB.idTableB 是PK,并且它在TableA.idTableB_FK来表示)。它是 的一对一关系,因为您只能在TableA中有一行取 外键值。

假设下面的数据表A

idTableA  | idTableB_FK 
----------------------------- 
    1  |  2 
    2  |  5 
    3  |  6 
    4  |  8 

而且在表B

idTableB  | idTableA_FK 
------------------------------ 
    1  |  1 
    2  |  1 
    3  |  2 
    4  |  2 
    5  |  2 
    6  |  3 
    7  |  3 
    8  |  4 

现在folloing,我想要一个查询,显示idTableA,idTableB,并会显示is_set列。该设置是一个是/否字段(或1/0),只有在表设置为yes时,TableA.idTableB_FK对于该FK具有相应的设置值。所以对于上面的例子:

idTableA | idTableB |  is_set 
--------------------------------------------- 
    1  |  1  |  no 
    1  |  2  |  yes 
    2  |  3  |  no 
    2  |  4  |  no 
    2  |  5  |  yes 
    3  |  6  |  yes 
    3  |  7  |  no 
    4  |  8  |  yes 

谢谢。

回答

0

我落得这样做:

SELECT b.idTableA_FK, b.idTableB , 

IF (
    (SELECT a.idTableB_FK 
     FROM (TableA AS a) 
     WHERE a.idTableA = b.idTableA_FK 
    ) = b.idTableB, TRUE, FALSE 
) AS is_set 

FROM (TableB AS b) 

哪个产生了相关CT结果。

我想感谢所有回复,我投票fthiella,因为他/她的建议解决方案对我的解决方案有影响。

0

确定是从内存中,但应该这样做。如果它是错的,我可以运行它反对某些东西并修复它。

SELECT tb.idTableA_FK AS idTableA, tb.idTableB, tbb.idTableB IS NOT NULL AS is_set 
    FROM TableB AS tb LEFT JOIN TableA AS ta ON (tb.idTableA_FK = ta.idTableA) 
    LEFT JOIN TableB AS tbb ON (ta.idTableB_FK = tbb.idTableB) 
0

我认为,这是你在找什么:

SELECT a.idTableA, b.idTableB, c.idTableB_FK IS NOT NULL is_set 
FROM TableA a, TableB b LEFT JOIN TableA c ON b.idTableB=c.idTableB_FK 
WHERE b.idTableA_FK=a.idTableA 
1

我认为你正在寻找的东西是这样的:

select 
    TableA.idTableA, 
    TableB.idTableB, 
    case when EXISTS(select null 
       from TableA TableA_1 
       where 
       TableA_1.idTableA = TableA.idTableA 
       and TableA_1.idTableB_FK = TableB.idTableB) 
    then 'yes' else 'no' end as is_set 
from 
    TableB left join TableA 
    on TableB.idTableA_FK = TableA.idTableA