0

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

我已经使用了联接和子查询,但我得到的结果是空的,它不是强制性的,t2、t3、t4、t5 表中的所有字段都已填充。t4、t5、t3、t2 可以为空我正在使用 where 子句on data 如果 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
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 回答