1

2つのテーブルがあります。最初のテーブルの人が2番目のテーブルにもいる場合を除いて、最初のテーブルのサンプルを描きたいと思います。この一見単純なクエリを実行するのに問題があります。

テーブルユーザー

id|name

テーブルcatuser

id|userid|catid

私が試してみました

SELECT u.*,c.userid FROM `users` u
LEFT JOIN `catuser` c
ON (u.id = c.userid AND c.userid <> '197')
WHERE u.id = '1'

とバリエーションは役に立たない。何か提案をいただければ幸いです。

4

3 に答える 3

2

なんてこった。これ:

SELECT u.*,c.userid 
FROM `users` u
LEFT JOIN `catuser` c
ON u.id = c.userid 
WHERE u.id = '1'
AND c.userid <> '197'
AND c.userid is null
于 2012-11-15T11:21:21.247 に答える
2
SELECT * FROM users WHERE id NOT IN (SELECT DISTINCT userid FROM catuser)
于 2012-11-15T11:27:52.180 に答える
0

1つ以上のカテゴリを持つユーザーのみにクエリを実行する場合は、次のWHERE EXISTSクエリを使用できます。

SELECT u.* FROM `users` u
WHERE EXISTS (SELECT * FROM catuser WHERE catuser.userid = u.id)

もう1つの可能性は、左結合を実行し、nullのチェックで結合が成功したかどうかを確認することです。

SELECT u.*, c.* FROM `users` u
LEFT JOIN catuser c ON u.id = c.userid
WHERE c.id IS NOT NULL

catuserに対応する行がない場合、すべてのcatuserフィールドはnullになります。c.idnullでないかどうかをチェックすることにより、カテゴリを持つ行のみを含めます。

ユーザーが複数のカテゴリに属している場合、参加によってユーザーが複数回返される場合があることに注意してください。

于 2012-11-15T11:27:50.427 に答える