我有两个表可以有多个记录链接到另一个表,但我不希望mySQL将行组合在一起。例如:
在此示例中,有三条记录链接到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
NB我坚持使用mySQL3,这意味着没有像WHERE中的SELECT那样花哨的东西,也没有UNIONs。
答案 0 :(得分:2)
有一篇非常酷的文章,我曾经读过有关将MySQL3.x欺骗为模仿UNION
的文章。您需要创建一个DUMMY表,其中包含Unions所需的行数。因此,如果你有1个union(这是2个不同的select语句),你需要在dummy表中有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可以更好地帮助您顺利完成。
答案 1 :(得分:0)
在您的查询中,您可以将以下内容添加到where
子句:
test_veg.mainID is NULL and test_fruit.main_id is NULL
这将使主要的东西既不是水果也不是蔬菜。
但是,我认为您的数据存在问题。
同一输出行上的所有内容都具有相同的MaindID。因此,白菜需要与苹果和梨相同mainID
。但是,如果我正确地理解了这个问题,那么mainId应该区分苹果和梨之类的东西。