gpt4 book ai didi

mysql - 为 3 个 mySQL 表之间的每个结果显示一行

转载 作者:行者123 更新时间:2023-11-29 02:30:15 26 4
gpt4 key购买 nike

我有两个表,可以有多个记录链接到另一个表,但我不希望 mySQL 将行组合在一起。示例:

  • test_main 包含字段 mainID、field1。
  • test_veg 包含一条蔬菜名称的记录,链接到 test_main 中 ID=1 的记录
  • test_fruit 包含两个记录,每个记录都有一个水果的名称,都链接到 test_main 中 ID=1 的记录

在这个例子中,有三个链接到 test_main 的记录——一个 test_veg 和两个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com