MySQL如果在另一个表中不存在,则返回不同的值

时间:2013-09-11 06:36:35

标签: mysql

我有itemslists个表,分别存储项目和列表。我正在尝试检索由url标识的特定列表中的所有项目。 urllists中的唯一键。

SELECT 
    items.item_name,
    items.position,
    items.checked,
    lists.list_name
FROM 
    items 
JOIN lists
WHERE 
    items.list_id=lists.list_id AND lists.url=?
ORDER BY items.position

这有效,但我想区分

的情况
    {li> lists.urllists和中不存在
  1. 它存在于lists中,但列表中不包含任何项目。
  2. 目前,此查询在两种情况下都返回空集。在一个查询中执行此操作的好方法是什么?

3 个答案:

答案 0 :(得分:1)

选择listsLEFT JOIN items

SELECT items.item_name,
       items.position,
       items.checked,
       lists.list_name
FROM lists
LEFT JOIN items ON items.list_id=lists.list_id 
WHERE lists.url=?
ORDER BY items.position

如果列表存在但没有项目,您将获得单行。项目字段为NULL

答案 1 :(得分:0)

使用左连接:

SELECT 
  items.item_name,
  items.position,
  items.checked,
  lists.list_name 
FROM lists
LEFT JOIN items ON lists.list_id=items.list_id
WHERE lists.url=?
ORDER BY items.position

如果列表不存在,这将返回一个空的结果集,如果列表为空,它将返回list_name,所有item-fields将为null。

答案 2 :(得分:0)

您可以使用if exists来区分结果,

像:

   IF EXISTS(SELECT * from lists where lists.url=@urlid) THEN
   BEGIN

    SELECT items.item_name,items.position,items.checked,lists.list_name
    FROM items JOIN lists
    WHERE items.list_id=lists.list_id AND lists.url=?
    ORDER BY items.position
  END
  ELSE
  BEGIN
   // Return something else to differential that urlid is invalid. like Select 0
  END

对于第二种情况,如果要知道是否存在结果,您可以先在里面使用计数查询。