mysql子查询或加入

时间:2012-07-03 09:21:47

标签: mysql linux

我的Mysql数据库中有5个表,其中t1的字段名称如data,id,cool和其他4个表的id和数据表示t2,t3,t4,t5。

我使用了连接和子查询,但我得到的结果是空的设置它不是强制性的,t2,t3,t4,t5表中的所有字段都填充.t4,t5,t3,t2可以为空我是对数据使用where子句如果t1 = t2 = t3 = t4 = t5的数据列,如果它在任何表中找到任何匹配数据,则从t1和id打印冷却,如果有,则从找到的表中打出数据,如果找到数据匹配在所有表格中,它打印所有表格统计信息,如

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

1 个答案:

答案 0 :(得分: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)

从你的例子中,很可能会有重复的记录要过滤它们,请使用像这样的不同 -

SELECT DISTINCT cool, data, id
FROM
(
-- above query here
)