1

MYSQL。私のテーブルを紹介しましょう。

users行のあるテーブルがありますid

tasksidと。を含むテーブルがありますtitle

行(users.idの場合)と( tasks.idの場合)users_tasksの両方を接続するテーブルがあります。iduidtid

ここで、すべてのタスクのリストに加えて、idを持つユーザーが6そのタスクに割り当てられている場合の情報(=にエントリがusers_tasks存在する場合はuid= 6)が必要です。

最初は簡単です。すべてのタスクを取得します。SELECT * FROM tasksしかし、今は何ですか?LEFT JOINを続行しようとしましたusers_tasksが、結果が奇妙すぎて正しい方向に見えませんでした...条件付き結合のようなものが必要ですか?よくわかりません

私の好ましい結果は次のようになります(4つのタスクがあり、ユーザー6が1と3に割り当てられていると仮定します)。

tasktitle  | entry for user 6
-----------------------------
task 1     |       1
task 2     |       0
task 3     |       1
task 4     |       0

墓へのコメントのために編集:

SELECT
*, EXISTS (SELECT 1 FROM users_tasks ut WHERE tasks.id = ut.tid AND ut.uid = 6)
FROM
tasks
4

1 に答える 1

1

参加する必要はまったくありません。

SELECT
*
FROM
tasks
WHERE EXISTS (SELECT 1 FROM users_tasks ut WHERE tasks.id = ut.tid AND ut.uid = 6)

EXISTS ()これは、行が見つかるとすぐに返されるのに対し、結合は一致するすべての行を返すため、結合よりも高速に実行されるはずです。

于 2013-03-27T11:18:25.940 に答える