我正在处理查询。我有两个表,一个是详细信息表,其中没有分组发生,它包括所有值,其他表是行表,其中重要的列从详细表中组合在一起。
我想显示行表中的所有列和详细信息表中的一些列。
我使用以下查询来获取我的记录
SELECT ab.*,
cd.phone_number,
cd.id
FROM xxx_line ab,
xxx_detail cd
WHERE cd.reference_number = ab.reference_number
AND cd.org_id = ab.org_id
AND cd.request_id = ab.request_id
AND ab.request_id = 13414224
INTERSECT
SELECT ab.*,
cd.phone_number,
cd.id
FROM xxx_line ab,
xxx_detail cd
WHERE cd.reference_number = ab.reference_number
AND cd.org_id = ab.org_id
AND cd.request_id = ab.request_id
AND ab.request_id = 13414224
查询工作正常......
但我想知道有没有其他方法可以通过甚至不使用Intersect来达到相同的效果。
我的目的是找出获得相同输出的所有可能方法。
答案 0 :(得分:1)
INTERSECT
运算符返回每个查询返回的唯一行集。可以使用DISTINCT
运算符重写代码,以使含义更清晰:
SELECT DISTINCT
xxx_line.*,
xxx_detail.phone_number,
xxx_detail.id
FROM xxx_line
JOIN xxx_detail
ON xxx_line.reference_number = xxx_detail.reference_number
AND xxx_line.org_id = xxx_detail.org_id
AND xxx_line.request_id = xxx_detail.request_id
WHERE xxx_line.request_id = 13414224
我还使用较新的ANSI连接语法(通过强制连接表和条件彼此靠近而使关系更清晰)替换了旧式连接语法,并删除了无意义的表别名(因为代码复杂性更高)与变量数量直接相关的字符数。)