SQL Select - 如果另一个表中存在值,则计算列

时间:2014-06-03 17:30:58

标签: sql sql-server

尝试使用非常有限的知识和经验来处理SQL查询。尝试了很多我通过搜索找到的东西,但没有得出我想要的结果。

我有四张桌子:

ORDERS
[ID][DATE]

ORDER_DETAILS
[ID][ITEM_NO][QTY]

ITEMS
[ITEM_NO][DESC]

KITS
[KIT_NO][ITEM_NO]

Re:KITS - [KIT_NO]和[ITEM_NO]都是ITEMS表的FK。它们的串联是PK。

我想选择ORDERS,ORDERS.DATE,ORDER_DETAILS.ITEM_NO,ITEMS.DESC

没问题。一些简单的内部联接,我正在路上。

困难在于在select语句IS_KIT中添加一列,如果符合以下情况,则为真:

EXISTS(SELECT null FROM KITS WHERE KITS.ITEM_NO = ORDER_DETAILS.ITEM_NO)

(如果套件表包含该项,则标记此行)

有没有办法计算该列?

1 个答案:

答案 0 :(得分:6)

有不同的方法可以做到这一点。

最简单的可能是带有CASE计算列的LEFT JOIN:

SELECT
  o.date,
  od.item_no,
  i.desc,
  CASE WHEN k.item_no IS NULL THEN 0 ELSE 1 END AS is_kit
FROM      orders        o
JOIN      order_details od ON od.id=o.id
JOIN      items         i  ON i.item_no = od.item_no
LEFT JOIN kits          k  ON k.item_no = od.item_no

但你也可以使用SUBSELECT:

SELECT
  o.date,
  od.item_no,
  i.desc,
  (SELECT COUNT(*) FROM kits k WHERE k.item_no = od.item_no) AS is_kit
FROM orders        o
JOIN order_details od ON od.id=o.id
JOIN items         i  ON i.item_no = od.item_no