1

2 つのテーブルがあり、1 つのテーブルはユーザー用で、もう 1 つのテーブルは user_interested_in_who テーブルです。

ユーザーが別のユーザーに興味を持っている場合、その 2 人のユーザーの ID を user_interested_in_who テーブルに挿入します。

私のテーブルのスキーマは次のとおりです。

Users               user_interested_in_who
  id                id
  name              this_user (id from the users table)
                    interested_in_this_user (id from the users table)
                    interested_or_not (1 = yes, 0 = no)

テーブルを結合してクエリを実行したいので、クエリは次のようになります。

SELECT users.id, users.name, user_interested_in_who.interested_or_not
FROM users
LEFT JOIN user_interested_in_who
ON user_interested_in_who.this_user = 1 *//1 is the id of the current log in user*
GROUP BY users.id

このクエリの問題は、interested_or_not 列がすべて 1 であることです。

私の質問は、user_interested_in_who テーブルにレコードが見つからない場合に NULL を返すようにクエリを実行する方法と、レコードが 0 の場合に user_interested_or_not 列に 0 を返すようにクエリを実行する方法です。


編集:

この種のテーブルを返すにはどうすればよいですか:

table:
id | name | interested_or_not
1    jess   NULL
2    erika  1
3    jil    0
4    adrian NULL
....
1050 mich   1
4

2 に答える 2

2

LEFT OUTER JOIN を使用する必要がありますが、ON 句にリテラル値はありません。

これにより、最初のテーブルのすべてのエントリと、2 番目のテーブルの一致または NULL のいずれかが返されます。

SELECT users.id, users.name, user_interested_in_who.interested_or_not
FROM users 
LEFT OUTER JOIN user_interested_in_who 
   ON user_interested_in_who.this_user = users.id 

グループ化する必要はありません。また、例の場合に WHERE は必要ありません (すべての値を表示していますか?)。ユーザー ID に限定したい場合は、次のように変更します。

SELECT users.id, users.name, user_interested_in_who.interested_or_not
FROM users 
LEFT OUTER JOIN user_interested_in_who 
   ON user_interested_in_who.this_user = users.id 
WHERE users.id = 1
于 2012-05-02T18:24:46.490 に答える
1

する必要はありJOINませんLEFT JOINJOIN両方のテーブルのレコードのみが返されます。結合を作成するためにユーザーのログイン ID を使用する代わりに、where 句も必要です。

何もグループ化する必要がないため、常に 1 になります。

これはあなたが望むことをするはずです。

SELECT users.id, users.name, user_interested_in_who.interested_or_not
FROM users
JOIN user_interested_in_who
ON user_interested_in_who.this_user = users.id
WHERE users.id=1;
于 2012-05-02T16:21:09.790 に答える