-1

OK、2 つの MySQL テーブルがあります。

次の列を含むTableA : idTableAおよびidTableB_FK

次の列を含むTableB : idTableBおよびidTableA_FK

関係は次のとおりです。

  1. TableA から TableB への 1 対多の関係 ( TableA.idTableAは PK であり、その関係の FK はTableB.idTableA_FK )

  2. TableA と TableB の間の 1 対 1 の関係 ( TableB.idTableBは PK であり、 TableA.idTableB_FK で表されます)。TableA には外部キー値を取得できる行が 1 つしかないため、これは 1 対 1 の関係です。

TableAに次のデータがあるとします。

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 列を表示するクエリが必要です。is set は yes/no フィールド (または 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

ありがとう。

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

OK、それはメモリからのものでしたが、それを行う必要があります。それが間違っている場合、私は何かに対してそれを実行し、それを修正することができます。

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 に答える