Mysql 查询以查找是否设置了外键

Mysql 查询以查找是否设置了外键,mysql,Mysql,好的,我有两个MySQL表: 表格A包含以下列:idTableA和idTableB\u FK TableB包含以下列:idTableB和idTableA\u FK 这些关系如下: 从表A到表B的一对多关系(TableA.idTableA PK和该关系的FK是表B.idTableA\u FK) 表A和表B之间的一对一关系(TableB.idTableB 是主键,在表a.idTableB_FK中表示。它是 一对一的关系,因为您只能在TableA中有一行执行 外键值 假设表A中有以下数据 idTabl

好的,我有两个MySQL表:

表格A包含以下列:idTableAidTableB\u FK

TableB包含以下列:idTableBidTableA\u FK

这些关系如下:

  • 从表A到表B的一对多关系(TableA.idTableA PK和该关系的FK是表B.idTableA\u FK

  • 表A和表B之间的一对一关系(TableB.idTableB 是主键,在表a.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和将显示的是_set列的查询。设置为是/否字段(或1/0),其中仅当表格a.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
    

    谢谢。

    好的,这是记忆中的,但应该可以。如果它是错误的,我可以运行它的东西,并修复它

    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)
    

    我相信这就是你想要的:

    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
    

    我想你正在寻找这样的东西:

    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
    
    我最终做了这样的事:

    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)
    
    这产生了正确的结果

    我要感谢所有的回应,我投票赞成,因为他/她提出的解决方案对我的解决方案有影响