-1

好的,我有两个 MySQL 表:

TableA包含以下列:idTableAidTableB_FK

TableB包含以下列:idTableBidTableA_FK

关系如下:

  1. 从 TableA 到 TableB 的一对多关系(TableA.idTableA是 PK,该关系的 FK 是TableB.idTableA_FK

  2. TableA 和 TableB 之间是一对一的关系(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

现在,我想要一个显示 idTableA、idTableB 和 is_set 列的查询。设置是一个是/否字段(或 1/0),其中仅当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

谢谢。

4

4 回答 4

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
于 2012-11-13T21:09:09.393 回答
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)
于 2012-11-13T20:43:30.403 回答
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
于 2012-11-13T20:48:29.770 回答
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,因为他/她建议的解决方案对我的解决方案有影响。

于 2012-11-14T03:31:55.373 回答