0

我有itemslists表分别存储项目和列表。我正在尝试检索由url. url是 中的唯一键lists

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

这行得通,但我想区分一个情况

  1. lists.url不存在于lists
  2. 它存在于 中lists,但该列表不包含任何项目。

目前,此查询在两种情况下都返回一个空集。在一个查询中执行此操作的好方法是什么?

4

3 回答 3

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

于 2013-09-11T06:53:01.270 回答
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 并且所有项目字段都将为空。

于 2013-09-11T06:48:33.243 回答
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

对于第二种情况,您可以首先在内部使用 count 查询来知道是否不存在结果。

于 2013-09-11T06:55:21.093 回答