好的,我有两个MySQL表:
TableA 包含以下列: idTableA 和 idTableB_FK
TableB 包含以下列: idTableB 和 idTableA_FK
关系如下:
从TableA到TableB的一对多关系( TableA.idTableA 是 PK,以及该关系的FK是 TableB.idTableA_FK )
TableA和TableB之间的一对一关系( TableB.idTableB 是PK,它以 TableA.idTableB_FK 表示。它是 一对一的关系,因为你只能在TableA中有一行来获取 外键值。
假设 TableA
中包含以下数据idTableA | idTableB_FK
-----------------------------
1 | 2
2 | 5
3 | 6
4 | 8
以下是 TableB
idTableB | idTableA_FK
------------------------------
1 | 1
2 | 1
3 | 2
4 | 2
5 | 2
6 | 3
7 | 3
8 | 4
现在,我想要一个将显示idTableA,idTableB的查询,并将显示is_set列。设置为是/否字段(或1/0),仅当 TableA.idTableB_FK 具有该FK的相应设置值时才设置为yes。所以对于上面的例子:
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 :(得分: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
答案 1 :(得分: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)
答案 2 :(得分: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
答案 3 :(得分: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)
哪个产生了正确的结果。
我要感谢所有回复的人,我正在投票fthiella因为他/她建议的解决方案对我的解决方案有影响。