当前位置: 首页 > 面试题库 >

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

穆鸿飞
2023-03-14
问题内容

尝试通过一些非常有限的知识和经验来进行SQL查询。尝试了很多我通过搜索发现的内容,但没有得出我想要的结果。

我有四个表:

ORDERS
[ID][DATE]

ORDER_DETAILS
[ID][ITEM_NO][QTY]

ITEMS
[ITEM_NO][DESC]

KITS
[KIT_NO][ITEM_NO]

回复:KITS-[KIT_NO]和[ITEM_NO]都位于ITEMS表中。它们的串联是PK。

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

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

困难在于在select语句中添加一列,IS_KIT如果满足以下条件,则为true

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

(如果kits表包含该项目,请标记此行)

有什么方法可以计算该列?


问题答案:

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

最简单的可能是带有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


 类似资料:
  • 问题内容: 我有2张桌子,一张用于会员,另一张用于他们的服务。这些是MySQL 5.6服务器上的InnoDB表。 会员表: 服务表: 我尝试达到以下结果: 因此,如果服务表中存在用户ID,则列服务将为true或false。 我尝试使用JOIN和子查询来完成此操作,但没有成功,因此我需要您的帮助;) 问题答案: 使用服务表,请尝试此查询

  • 我想创建一个动态表,从静态表中提取第5列,并将其乘以一个值字段。 1.静态表 2.动态表 在excel中,我只需要对它旁边的单元格进行计时。但是我希望sql在每次上传新的静态文件时创建/更新数据库。 ok更新 查看后,我需要一些不同的东西,我需要采取两个表,并将它们相互累加一个表将是和其他在 帐户;渠道;[产品代码](这是我的P.key);1月;2月;标记;APR;五月;君;七月;8月;9月;OC

  • 问题内容: 我有两个表,将值存储为。 我正在填充表,如果其他表中不存在值,则只想在其中一个表中插入值。 就像是: 我怎样才能做到这一点? 问题答案: 您需要使用某种类型的查询。 更新(在澄清之后): 例如,如果相应的行在中尚不存在,则下面是如何在其中插入行: 要用同一查询插入多行,恐怕没有什么比这更好的了 原始答案 例如,这将从满足该子句的所有行中提取,并使用用作的值插入行。它将忽略重复的键错误。

  • 我有三个表表1、表2、表3。表1有a、b列。表2有c、b、d列。表3有d、e列 我需要匹配表1、b上的表2,以及d上的表2和表3。我需要在表1的“a”列中显示数据,如果表2和表3中存在匹配的行,那么我需要在表3中显示列“e”以及列“a”。如果表2和表3之间的匹配中不存在行,我可以显示null。 让我知道任何澄清或数据。我使用sqlite3,但存在子句的工作方式似乎就像在sql中一样。 我尝试了,但

  • 我在Postgres 11中有以下表格: 我想在col3列中搜索col4的每个值。如果col4中的值存在于col3中,我想保留其他行,该行应该被排除在外。 期望输出为: 我无法尝试这方面的任何东西,因为我还无法找到解决方案。

  • 问题内容: 我有一个表,其中包含商店中每件商品的单价和其他详细信息。 另一个包含每个订单中包含的项目的详细信息。 现在我要计算 请注意,我希望它成为表本身的一部分,而不是作为其他视图或查询。我怎样才能做到这一点?我为此研究了触发器和其他机制,但是它们是否适用于不同表中的值,尤其是在存在此类约束的情况下? 我尝试过根据另一列计算出的Column进行以下触发吗?: 但这似乎没有用 问题答案: 这是如何