UNION和LIMIT 1澄清

时间:2011-12-25 18:49:34

标签: mysql sql

我有一个可怕的疑问。

我有这样的查询:

SELECT id,fatherID FROM comments WHERE fatherID IS NULL 
 UNION
SELECT id,fatherID FROM comments WHERE fatherID IS NOT NULL 
 LIMIT 1

(注意限制1适用于联合,而不仅适用于第二个查询)
(注2:IS NULL,IS NOT NULL只是一个例子,它们也可以是随机字符串)

有了这个限制1我确定这种查询会一直从第一个查询返回行吗?

或者即使两个查询都返回了某些内容,LIMIT 1会从第二个查询中获取该行吗?

我问这个因为如果我运行那个查询(限制1)我得到了这个结果

http://img856.imageshack.us/img856/5212/immaginejv.jpg

当我除了这样的事情之外(首先是fatherid = null的所有行,然后是另一行):

http://img847.imageshack.us/img847/479/immaginehx.jpg

2 个答案:

答案 0 :(得分:4)

返回结果的顺序(默认情况下)未定义。如果您希望以特定方式对它们进行排序,请使用ORDER BY,这样就可以完成此操作。

答案 1 :(得分:2)

我对您的查询有疑问。为什么你需要这个查询?你只需通过组合两个相反的查询来选择所有行,即

fatherID IS NULL OR NOT NULL

此联合查询如何在结果中显示重复行?

SELECT id, fatherID 
FROM comments 
WHERE fatherID IS NULL 

UNION

SELECT id, fatherID 
FROM comments 
WHERE fatherID IS NOT NULL 
LIMIT 1

您可以通过此查询直接获得结果(First all the rows with fatherid = null, then the other):

SELECT id, fatherID 
FROM comments 
ORDER By fatherID

更新回答:

SELECT * 
FROM  
    (SELECT 
         id, fatherID 
     FROM 
         comments 
     WHERE 
         fatherID = 'somerandomstring1'

     UNION

     SELECT 
         id, fatherID 
     FROM 
         comments 
     WHERE 
         fatherID = 'somerandomstring2') combined_comments
ORDER BY 
    combined_comments.fatherID
LIMIT 1