0

2 つのテーブルを結合する必要があります。users.private= 0の一致のみを表示したい

feeds
id     user_id
100    1
101    NULL
102    2

users
id   private
1    1
2    0

関連する多くの質問を見てきましたが、答えは常に WHERE 条件を ON にすることです。しかし、私がこれを行うと:

SELECT `feeds`.`id`, `feeds`.`user_id` AS `feed_user_id`, `users`.`id` AS `user_id`,  `users`.`private` 
FROM  `feeds` 
    LEFT JOIN `users` ON `feeds`.`user_id` = `users`.`id` 
        AND `users`.`private` = 0

これは戻ります

id     feed_user_id  user_id  private
100    1             NULL     NULL
101    NULL          NULL     NULL
102    2             2        0

私がしたいことは、最初の行ID 100を除外することです.(だから、それは実際にはLEFT JOINではないと思います->条件が満たされた場合はLEFT JOINになり、そうでない場合は除外します)どうすればこれを行うことができますか?

4

1 に答える 1

1

次のように、JOIN に 1 つ、SELECT に 1 つずつ、2 つの個別の条件句が必要です。

SELECT `feeds`.`id`, `feeds`.`user_id` AS `feed_user_id`, `users`.`id` AS `user_id`,  `users`.`private` 
FROM  `feeds` 
LEFT JOIN `users` ON `feeds`.`user_id` = `users`.`id` 
WHERE `users`.`private` = 0 OR `feeds`.`user_id' IS NULL

現在のアプローチの問題は、「この人は存在するので、この行を結果から除外する必要があります」と言うのではなく、結合がプライベートユーザーを存在しないかのように扱っていることです。

于 2013-04-15T16:53:39.503 に答える