我有items
和lists
个表,分别存储项目和列表。我正在尝试检索由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
这有效,但我想区分
的情况lists.url
在lists
和中不存在
lists
中,但列表中不包含任何项目。 目前,此查询在两种情况下都返回空集。在一个查询中执行此操作的好方法是什么?
答案 0 :(得分:1)
选择lists
和LEFT 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
对于第二种情况,如果要知道是否存在结果,您可以先在里面使用计数查询。