【发布时间】:2022-11-25 20:10:45
【问题描述】:
你能告诉我如何显示默认值而不是根本不显示整个记录吗?我有一个大学项目为维修服务做表格。每个订单都应该有 2 个操作员的 ID——进行诊断的操作员和进行维修的操作员。目前我有10个订单。他们每个人都有一个进行诊断的操作员。但是 10 个中只有 3 个有操作员进行维修。因此,我需要的记录中有7条没有经过修复操作,也没有与订单相关的修复操作。通过执行下面的查询,我只得到 10 条记录中的 3 条,因为其中 7 条记录没有经过修复操作。我该如何解决这个问题,以便获得所有 10 条记录,以便那些没有经过修复的记录获得默认值(例如 NULL)?
澄清: OPERATION_TYPE_ID = 2 表示诊断 OPERATION_TYPE_ID = 1 表示修复 如果我删除查询的最后一行,我将获得所有 10 条记录。
SELECT
MODEL AS "Model",
ENTRY_DATE AS "Entry date",
CLIENT_ID AS "Client ID",
DEVICE_TYPE AS "Device type",
OO1.OPERATOR_ID AS "Operator diagnostic",
OO2.OPERATOR_ID AS "Operator repair"
FROM
P_DEVICE D,
P_ORDER O,
P_DEVICE_TYPE T,
P_ORDER_OPERATION OO1,
P_ORDER_OPERATION OO2
WHERE
D.DEVICE_ID = O.DEVICE_ID AND
D.DEVICE_TYPE_ID = T.DEVICE_TYPE_ID AND
(OO1.ORDER_ID = O.ORDER_ID AND OO1.OPERATION_TYPE_ID = 2) AND
(OO2.ORDER_ID = O.ORDER_ID AND OO2.OPERATION_TYPE_ID = 1)
【问题讨论】:
-
今日提示:切换到现代的、显式的
JOIN语法。更易于编写(无错误),更易于阅读(和维护),并且更容易转换为外连接如果需要的话。 -
我有更多的错误。但如果这是正确执行查询的唯一方法,我会尝试切换到它。
-
隐式连接已经过时 30 年了!
-
好吧,我不太关心语法。我有一项任务要做,我正在努力去做。现在我绝对不需要 SQL 来工作。但如果 JOIN 能够解决我的问题,我会尝试。
-
“好吧,我不太关心语法”-> 这在询问 SQL 问题时是一个极端的问题,因为语法是 SQL 中最决定性的事情。过时的逗号分隔表列表的工作方式类似于 INNER JOIN,但如果您想为不匹配的记录获取空值,则可能需要使用 LEFT JOIN。
标签: sql