我正在尝试解释此SQL代码,但是无论我尝试多少,都无法获得正确的输出。表格是:
T1 T2
C1 C2 C1 C2
A 1 A 4
A 2 A 2
B 2 B 2
C 1 D 5
我是从错误的方式(向上->向下)阅读代码吗? SELECT DISTINCT,这是否意味着我应该省略每个表中重复的行之一?
我应该从条件T1.C1 = T2.C1联接表开始吗?
我自己的输出是:
A 1 A 4
A 2 A 2
B 2 B 2
正确的输出是:
A 2 A 2
A 2 A 4
B 2 B 2
相关代码:
SELECT DISTINCT T1.C1, T1.C2, T2.C1, T2.C2
FROM T1
JOIN T2 ON T1.C1 = T2.C1
WHERE T1.C2 IN (2, 4)
答案 0 :(得分:3)
在不习惯之前,SQL语句流有点奇怪。
首先,您要命名数据源,在这种情况下,您将以此命名虚拟表。
FROM T1
JOIN T2 ON T1.C1 = T2.C1
接下来,您将过滤数据源。
WHERE T1.C2 IN (2, 4)
接下来,您选择输出结果集中所需的列:
SELECT T1.C1, T1.C2, T2.C1, T2.C2
接下来,您可以通过插入DISTINCT
子句或使用GROUP BY
子句来汇总数据。
接下来,您使用ORDER BY
子句对其进行排序。你没有一个。没关系。
这就是像您一样的SQL查询的逻辑结构。但是请记住,MySQL和其他SQL表服务器已经有数千名程序员致力于优化这些内容。