有人可以告诉我如何编写以下SQL:
SELECT url_source_wp.url
FROM url_source_wp
WHERE url_source_wp.id NOT IN (
SELECT url_done_wp.url_source_wp
FROM url_done_wp
WHERE (url_done_wp.url_group = 4) AND (hash IS NULL)) LIMIT 50;
使用加入?
我试过了:
SELECT url_source_wp.url
FROM url_source_wp
LEFT OUTER JOIN url_done_wp ON url_source_wp.id = url_done_wp.url_source_wp
WHERE url_done_wp.url_group = 4 AND url_source_wp.hash is NULL LIMIT 50
但答复不一样。
问题是第一个SQL非常慢。
答案 0 :(得分:3)
我相信你正在寻找这样的东西:
SELECT url_source_wp.url
FROM url_source_wp
LEFT OUTER JOIN url_done_wp
ON url_source_wp.id = url_done_wp.url_source_wp AND url_done_wp.url_group = 4 AND hash IS NULL
WHERE url_done_wp.url_source_wp IS NULL
LIMIT 50
答案 1 :(得分:0)
你不应该否定WHERE子句中的两个条件吗?
我假设您正在尝试获取所有url_source_wp记录,这些记录在url_done_wp表中由FK url_source_wp引用的id为url_group = 4且其哈希列为NOT NULL,因为您使用过带有NOT IN的子查询。 INNER JOIN应该没问题。
所以它应该是:
SELECT url_source_wp.url
FROM url_source_wp
INNER JOIN url_done_wp ON url_source_wp.id = url_done_wp.url_source_wp
WHERE url_done_wp.url_group != 4 AND url_source_wp.hash IS NOT NULL LIMIT 50