【发布时间】:2013-07-09 16:27:23
【问题描述】:
我有以下查询,我从连接表日志和设备中获取数据,但来自表设备的 b.id 也在另一个名为 device2 的表中,具有相同的列名。所以我必须编写一个查询,如果设备表在该 id 列上有空值或空值,则必须使用表 log 提取表设备 2 上的记录,否则它必须连接表设备和日志。
SELECT TO_CHAR (a.LOG_DATE, 'mm/dd/yyyy HH:MI:SS') LOG_DATE,
b.id,
a.atid,
a.l_type,
a.l_subtype,
a.eq,
a.name,
a.comments
FROM log a, (equipment b or equipment2 b)
WHERE a.eqid = b.eqid(+)
AND log_date BETWEEN TO_DATE ('07/01/2013', 'MM/DD/YYYY')
AND TO_DATE ('07/08/2070', 'MM/DD/YYYY')
GROUP BY a.log_date,
b.id,
a.atid,
a.l_type,
a.l_subtype,
a.eq,
a.name,
a.comments
ORDER BY b.id;
【问题讨论】:
-
这些表之间是否定义了任何引用?这句话对我来说听起来很奇怪:
equipment table has **empty** or null value。另外,为什么有两个“设备”表?它们是否具有相同的结构? -
我们的数据库中有两种设备类型。假设当用户提交他们的请求时,他们可以选择类型 1 设备或类型 2。这两种类型的设备数据都来自名为 eqdata 的单个表,其中 id(主键)相同但设备类型不同。所以我们根据设备类型存储数据。如果其设备类型为 1,则转到设备 1 表,否则,如果其设备类型为 2,则转到 equipment2 表。
-
通过使用 ANSI-92 语法,这些类型的问题变得非常容易避免或解决。