请先参考以下答案:this
因此,在该答案中,它提供了一种基于一个不同的列及其对应的列来获取数据的方法。据我了解,它如何选择通过分别在条件WHERE t1.lastname > t2.lastname
或WHERE t1.lastname < t2.lastname
上进行升序或降序来对那个不同的列进行排序。
我仍在练习SQL,并且对上面链接中提供的方法有疑问。
t2.id
时,它全部为空。我无法理解,t2
与t1
基本上不是同一张表吗?如果是这样,它的id
变成NULL
而不是t1
s id
s的可能性如何?WHERE t2.id IS NULL
无论如何都要返回NULL,为什么需要检查t2.id
?LEFT JOIN
将我的t1
和{{1 }}基于他们的t2
。其次,我还要检查id
是否必须比t1.lastname
更大(>
),而我假设使用的是ASCII或UNICODE值,这肯定会给我返回!只有一个结果; 具有更高价值的产品。好的,现在再问一个问题:它是否与t2.lastname
逐一检查t1.lastname
,但对所有t2.lastname
都检查{{1},如果只是其中一个 {{1 }}导致该条件无效?我认为我在这里缺少某些东西。有人可以帮我吗?预先谢谢你。
答案 0 :(得分:1)
LEFT JOIN将显示联接的左侧部分(来自左表的值)并将显示:
例如:
INSERT INTO #test (id, firstname, lastname)
VALUES
(1, 'A', 'A'),
(2, 'B', 'B'),
(3, 'A', 'B'),
(4, 'B', 'C')
SELECT t1.*, t2.*
FROM #test AS t1
LEFT JOIN #test AS t2
ON t1.firstname = t2.firstname
AND t1.lastname < t2.lastname
它将显示
1 A A 3 A B
2 B B 4 B C
3 A B NULL NULL NULL
4 B C NULL NULL NULL
它显示了t1中的所有行,但由于加入条件t1.lastname 如果您现在添加WHERE条件: 您将结果限制为不满足联接条件的行。SELECT t1.*, t2.*
FROM #test AS t1
LEFT JOIN #test AS t2
ON t1.firstname = t2.firstname
AND t1.lastname < t2.lastname
WHERE t2.id IS NULL;