Redian新闻
>
[转载] Can anyone interpret this simple SQL?
avatar
[转载] Can anyone interpret this simple SQL?# Database - 数据库
w*y
1
【 以下文字转载自 Programming 讨论区,原文如下 】
发信人: wellboy (好男孩- MITBBS MEMBER SINCE 1998), 信区: Programming
标 题: Can anyone interpret this simple SQL?
发信站: Unknown Space - 未名空间 (Fri Jan 14 12:13:55 2005) WWW-POST
Access->Queries->New->Find Unmatched Query Wizard->"this wizard creates a
query that finds records in one table that have no related records in another
table"
SELECT A.ID
FROM A LEFT JOIN B ON A.ID = B.ID
WHERE (B.ID Is Null)
What does this SQL mean?
HELP!
avatar
n*f
2

another
This is a BAD SQL, DO NOTHING.
NO row will be returned.

【在 w*****y 的大作中提到】
: 【 以下文字转载自 Programming 讨论区,原文如下 】
: 发信人: wellboy (好男孩- MITBBS MEMBER SINCE 1998), 信区: Programming
: 标 题: Can anyone interpret this simple SQL?
: 发信站: Unknown Space - 未名空间 (Fri Jan 14 12:13:55 2005) WWW-POST
: Access->Queries->New->Find Unmatched Query Wizard->"this wizard creates a
: query that finds records in one table that have no related records in another
: table"
: SELECT A.ID
: FROM A LEFT JOIN B ON A.ID = B.ID
: WHERE (B.ID Is Null)

avatar
aw
3
嗯?没错啊?找出A TABLE里有,而B里没有的RECORDS啊?

【在 n****f 的大作中提到】
:
: another
: This is a BAD SQL, DO NOTHING.
: NO row will be returned.

avatar
n*m
4
DROP TABLE A;
DROP TABLE B;
COMMIT;
CREATE TABLE A (ID INT);
CREATE TABLE B (ID INT);
COMMIT;

INSERT INTO A VALUES(1);
INSERT INTO A VALUES(2);
INSERT INTO A VALUES(3);
INSERT INTO A VALUES(NULL);

INSERT INTO B VALUES(3);
INSERT INTO B VALUES(4);

【在 aw 的大作中提到】
: 嗯?没错啊?找出A TABLE里有,而B里没有的RECORDS啊?
avatar
n*m
5
Nmamtf talked about inner join:
SELECT A.ID
FROM A INNER JOIN B ON A.ID = B.ID
WHERE (B.ID Is Null)

【在 n****f 的大作中提到】
:
: another
: This is a BAD SQL, DO NOTHING.
: NO row will be returned.

avatar
w*y
6
WHERE (B.ID Is Null)
如何解释?
糊涂了。

a

【在 n**m 的大作中提到】
: Nmamtf talked about inner join:
: SELECT A.ID
: FROM A INNER JOIN B ON A.ID = B.ID
: WHERE (B.ID Is Null)

avatar
w*y
7
嗯。高人啊。
同属易懂的解释一下WHERE (B.ID Is Null) 的道理好吧?

【在 n**m 的大作中提到】
: DROP TABLE A;
: DROP TABLE B;
: COMMIT;
: CREATE TABLE A (ID INT);
: CREATE TABLE B (ID INT);
: COMMIT;
:
: INSERT INTO A VALUES(1);
: INSERT INTO A VALUES(2);
: INSERT INTO A VALUES(3);

avatar
aw
8
很简单啊。
如果这样你是不是容易理解点?
SELECT A.ID,B.ID
FROM A LEFT JOIN B ON A.ID = B.ID
WHERE (B.ID Is Null)
假设A
ID VAL
1 100
2 200
3 300
B:
ID VAL
1 100
2 200
QUERY(如果不加B.ID IS NULL)得:
1 1
2 2
3 NULL
加上得:
3 NULL。
**********************
然后WHERE前面去掉B.ID也一样得到3这个ID。
这种QUERY TRICK经常用到,即用LEFT JOIN做个类似减的操作。

【在 w*****y 的大作中提到】
: 嗯。高人啊。
: 同属易懂的解释一下WHERE (B.ID Is Null) 的道理好吧?

avatar
w*y
9
谢谢。
我关键没有充分理解Left Join 的含义。 现在知道了。
Also recommend http://www.w3schools.com/sql/sql_join.asp for those who are
still as confused as I used to be :)
非常感谢AW!

【在 aw 的大作中提到】
: 很简单啊。
: 如果这样你是不是容易理解点?
: SELECT A.ID,B.ID
: FROM A LEFT JOIN B ON A.ID = B.ID
: WHERE (B.ID Is Null)
: 假设A
: ID VAL
: 1 100
: 2 200
: 3 300

avatar
w*y
10
问题 :
可以用:
SELECT A.ID from A
where A.ID Not In
(Select B.ID from B)
吗?
有效率差别吗?
谢谢。

【在 aw 的大作中提到】
: 很简单啊。
: 如果这样你是不是容易理解点?
: SELECT A.ID,B.ID
: FROM A LEFT JOIN B ON A.ID = B.ID
: WHERE (B.ID Is Null)
: 假设A
: ID VAL
: 1 100
: 2 200
: 3 300

avatar
aw
11
NOT IN是非常不好的SQL(效率上),应尽可能避免。

【在 w*****y 的大作中提到】
: 问题 :
: 可以用:
: SELECT A.ID from A
: where A.ID Not In
: (Select B.ID from B)
: 吗?
: 有效率差别吗?
: 谢谢。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。