我有两个表,它们可以有多个记录链接到另一个表,但我不希望 mySQL 将行组合在一起。示例:
- test_main 包含字段 mainID、field1。
- test_veg 包含一个蔬菜名称的记录,链接到 test_main 中 ID=1 的记录
- test_fruit 包含两条记录,每条记录都有一个水果名称,均链接到 test_main 中 ID=1 的记录
在此示例中,有 3 个记录链接到 test_main - 1 个 test_veg 和 2 个 test_fruit。我想让这 3 行得到如下结果:
field1 vegName fruitName
------------------- ------- ---------
stuff in main table cabbage NULL
stuff in main table NULL apple
stuff in main table NULL pear
我还想要来自 test_main 的记录,这些记录没有链接到任何 test_veg 或 test_fruit 记录。
这看起来很简单,但我无法让它工作。有什么想法吗?
如果我只有两个表(例如 test_main 和 test_veg),则左连接就可以工作。对于 3 个表,两个左连接仅返回两行:
SELECT test_main.field1, test_veg.vegName, test_fruit.fruitName
FROM test_main
LEFT JOIN test_veg ON test_veg.mainID = test_main.mainID
LEFT JOIN test_fruit ON test_fruit.mainID = test_main.mainID
WHERE test_main.mainID=1
field1 vegName fruitName
------------------- ------- ---------
stuff in main table cabbage apple
stuff in main table cabbage pear
注意,我坚持使用 mySQL3,这意味着没有像 WHERE 中的 SELECT 或 UNION 之类的花哨的东西。
最佳答案
我不久前读过一篇非常酷的文章,内容是关于欺骗 MySQL3.x 来模仿 UNION
。您需要创建一个 DUMMY 表,其中包含并集所需的行数。因此,如果您有 1 个联合(这是 2 个不同的选择语句),则虚拟表中需要 2 行。
尝试这样的事情:
SELECT m.field1, v.vegName, f.fruitName
FROM test_main m
INNER JOIN dummy d
ON d.id < 3
LEFT JOIN test_veg v
ON v.mainID = m.mainID
and d.id = 1
LEFT JOIN test_fruit f
ON f.mainID = m.mainID
and d.id = 2
WHERE m.mainid=1
这是SQL Fiddle更好地帮助您跟进。
关于mysql - 为 3 个 mySQL 表之间的每个结果显示一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14384032/