2017-10-09 89 views
1

我遇到了MySQL查询(版本5.6.37)的问题。我认为它只需要重新组织查询组件,但我无法使其工作。空的MySQL连接的连接导致查询失败

问题:当我的JOIN不返回任何行时,即使数据与查询匹配,整个查询也不会返回任何行。

这里是我当前的查询(其中 '@' 是输入):

SELECT pets.id,pet,collar,GROUP_CONCAT(petData.fleas) AS f_id 
FROM titles 
    JOIN petWear ON pets.id = petWear 
    JOIN petData ON petWear.id = petData.id 
WHERE pets.id = '@' 
GROUP BY pets.id,pet,collar 

假设一个 “宠物” 表是这样的:

id | pet 
1 | cat 
2 | dog 
3 | fish 
4 | snake 
5 | rabbit 

而一个加入 “petData” 表像此:

id | fleas 
1 | 1 
1 | 2 
1 | 3 
1 | 4 
2 | 5 

成功查询: 如果@ = 1,则该查询返回单个结果:

id | pet | collar | f_id 
1 | cat | gold | 1,2,3,4 

不成功查询: 如果@ = 5,则该查询返回任何结果。

我想什么已经恢复(用于@ = 5)这是一个结果(即没有结果,或NULL,为“F_ID”):

id | pet | collar | f_id 
5 | rabbit | red | 

请注意,我已经包括了宠物服表与“领”列表,只是为了说明一个“正常”的加入也需要成为图片的一部分。

+1

你试过'LEFT OUTER JOIN petData'吗? –

+1

另外,感谢您对您正在尝试做的事情的清晰解释! –

+0

谢谢比尔和乔维。我每天都不使用SQL,并且指向不同的JOIN *类型*让我重新阅读了15年来我没有阅读的手册的部分内容!我只需要将'JOIN petData'改为'LEFT JOIN petData'。谢谢你的帮助。 – Parapluie

回答

0

请尝试下面的代码。基本上,如果GROUP_CONCAT没有返回任何值,它将打印no_fleas

SELECT pets.id,pet,collar,IFNULL((GROUP_CONCAT(petData.fleas), 'no_fleas') AS f_id 
FROM titles 
JOIN petWear ON pets.id = petWear 
JOIN petData ON petWear.id = petData.id 
WHERE pets.id = '@' 
GROUP BY pets.id,pet,collar 
+0

谢谢,萨米。我正在寻找这样的东西。不幸的是,它在MySQL v。5.6.37中不起作用。我使用上面的建议来使用LEFT JOIN。 – Parapluie