如何優化此mysql查詢?我正在使用IN()
運算符,但我認爲這不是實現它的方法。我如何優化這個mysql查詢?我使用IN()運算符
select *
from users
where usid NOT in
(
select usid
from images
where status=0
)
and us_status=0
如何優化此mysql查詢?我正在使用IN()
運算符,但我認爲這不是實現它的方法。我如何優化這個mysql查詢?我使用IN()運算符
select *
from users
where usid NOT in
(
select usid
from images
where status=0
)
and us_status=0
使用LEFT OUTER JOIN
SELECT users.*
FROM users
LEFT OUTER JOIN images ON user.usid = images.usid AND images.status = 0
WHERE images.usid IS NULL
AND us_status = 0
這避免了使用IN哪個行 表現不佳。
非常感謝,只是相反,us_status必須是users.status是的? –
您的原始查詢中有us_status。如果這是user.status的拼寫錯誤,請將其更改爲 – Kickstart
SELECT users.*
FROM users
LEFT JOIN images ON users.usid = images.usid AND images.status=1 AND images.usid IS NOT NULL
WHERE users.us_status = 0
請再次閱讀問題,我忘了寫NOT操作符。 –
@FəqanÇələbizadə編輯太 – Cosmin
您可以使用下面的查詢:
SELECT us.*
FROM users as us
INNER JOIN images as img ON us.usid = img.usid AND img.status=1
WHERE us.us_status = 0
請再讀一遍問題,我忘了寫NOT操作符。 –
[此問題](http://stackoverflow.com/q/2246772/1048425)更重要的是[此鏈接](http://explainextended.com/2009/09/18/not-in-vs- not-exists-vs-left-join-is-null-mysql /)在接受的答案中應該會幫助你。總之,對於MySQL,使用'LEFT JOIN/IS NULL'來移除匹配的記錄。 – GarethD