role
のこれら2つのクエリが異なる結果をもたらす理由を教えてください。これらの2つのSQLクエリは異なる結果を返します
RIGHT結果(役割を正しくユーザに関連付けられている):
SELECT
users.*,
activations.id AS activation
(SELECT
roles.name
FROM roles
INNER JOIN role_users ON roles.id = role_users.role_id
WHERE role_users.user_id = users.id
LIMIT 1) AS role
FROM users
LEFT JOIN activations ON users.id = activations.user_id
WRONG結果(役割は常にroles
テーブルの最初のレコードである):
SELECT
users.*,
activations.id AS activation
(SELECT
roles.name
FROM roles
INNER JOIN role_users ON roles.id = role_users.role_id
INNER JOIN users ON users.id = role_users.user_id
LIMIT 1) AS role
FROM users
LEFT JOIN activations ON users.id = activations.user_id
私は最初のクエリを使用することはできません(WHERE role_users.user_id = users.id
)と私は2番目を使用する必要があります( 'JOIN'):正しい結果を達成するには?
おかげ
EDIT:コメントに答えるために:私はLaravelクエリビルダでそれを構築し、そして表現WHERE role_users.user_id = users.id
、Laravelクエリに->where('role_users.user_id', '=', 'users.id')
に翻訳していますという短い中
I can't use the first query
手段、 Builderは、あたかもWHERE role_users.user_id = 'users.id'
のように処理されるため、動作しません。 whereRaw()を使用できますが、これを避けてより良い解決策を探したいのですが- 私はデータベーススキーマを構築しませんでしたが、Cartalyst Sentinelから来ました。
「最初のクエリを使用できません」とは、問題が何か正しい結果をもたらすかどうかということです。 –
ORDER BYのないLIMITはかなり意味がないことに注意してください。この例では、LIMITが何をしているのか分かりません。要するに、いずれかのクエリが正しい結果を返す場合、それは意図ではなく運が必要です。 – Strawberry