0

Mysql データベースには、data、id、cool などのフィールド名を持つ t1 を持つ 5 つのテーブルと、t2、t3、t4、t5 などの id とデータを持つ他の 4 つのテーブルがあります。

結合クエリとサブクエリを使用しましたが、得られる結果は空のセットです.t2、t3、t4、t5テーブルのすべてのフィールドが入力されていることは必須ではありません.t4、t5、t3、t2は空にすることができます私はwhere句を使用していますデータで t1 = t2 = t3 = t4 = t5 のデータ列の場合、いずれかのテーブルで一致するデータが見つかった場合、t1 からのクールと id を出力し、見つかったテーブルからのデータがある場合はデータを出力します。 table のようなすべてのテーブル統計を出力します

cool data.t1 id.t1
cool data.t2 id.t2 
and so on



table t1

cool data id
0    xyz   1

table t2

data id
xyz   5

table t3

data id
xyz   4

table t4

data id
xyz   3

table t5

data id
xyz   2

希望の出力

cool data id
  0   xyz  1
  0   xyz  4
  0   xyz  3
  0   xyz  5
  0   xyz  2

テーブルのいずれかが空の場合、出力よりも t5 と t4 と言う

 cool data id
  0   xyz  1
  0   xyz  4
  0   xyz  3
4

1 に答える 1

0

質問から私が理解しているのは、それぞれのテーブルのすべての一致と列t1について、他のすべてのテーブルのテーブルからデータを取得する必要があるということです。dataid

達成する簡単な方法は、各テーブルをt1個別に結合してから、 を使用union allしてすべての結果を結合することです。

SELECT t1.cool, t2.data, t2.id
FROM t1 INNER JOIN t2 ON (t1.id=t2.id) AND (t1.data=t2.data)
UNION ALL
SELECT t1.cool, t3.data, t3.id
FROM t1 INNER JOIN t3 ON (t1.id=t3.id) AND (t1.data=t3.data)
UNION ALL
SELECT t1.cool, t4.data, t4.id
FROM t1 INNER JOIN t4 ON (t1.id=t4.id) AND (t1.data=t4.data)
UNION ALL
SELECT t1.cool, t5.data, t5.id
FROM t1 INNER JOIN t5 ON (t1.id=t5.id) AND (t1.data=t5.data)

あなたの例のように、重複するレコードが存在する可能性は十分にあります。それらを除外するには、次のようにdistinctを使用します-

SELECT DISTINCT cool, data, id
FROM
(
-- above query here
)
于 2012-07-03T09:31:40.763 に答える