0

ロール ID に基づいて 2 つのテーブル (USERS および USERS_ROLES) を結合しようとしています。次のクエリに左の結合を配置しました。

users.id = users_roles.fk_user_id しかし、users_roles.fk_role_id coulmun の出力は正しくなく、users.id = users_roles では 4 (ほとんどの場所) である users.id = users_roles.fk_user_id の ID を表示する必要がある場所に NULL が表示されます。 .fk_user_id users_roles.fk_role_id = 4 の値

どうすればそれを修正できるか教えてください。私のクエリは、一致するIDの正確な値を返すはずです。ありがとう

SELECT users.id, users.v_first_name, users.v_last_name, user_facility.fk_facility_id,users.fk_tenant_id, marital_status.v_marital_status, 
            users.v_blood_type, NOW(),users_roles.fk_role_id
            FROM users
            LEFT JOIN (user_facility, marital_status, users_roles) ON
            users.id = user_facility.fk_user_id AND users.fk_marital_status_id=marital_status.id AND  users.id = users_roles.fk_user_id
4

3 に答える 3

2

またはjoinと一緒にAND演算子を使用すると、異なる結果が得られます。何を達成しようとしているのかを明確にする必要があります..これを参照してくださいLeftRight

于 2012-06-21T16:02:59.123 に答える
1

表示されている場合は、句NULL内のすべてのテーブル間に対応(関係)がないことを意味します。JOIN

すべてのテーブルにリレーションがあるものだけを表示する場合は、INNER JOIN代わりにを使用します。

SELECT u.id,
       u.v_first_name,
       u.v_last_name,
       uf.fk_facility_id,
       u.fk_tenant_id,
       ms.v_marital_status,
       u.v_blood_type,
       NOW(),
       ur.fk_role_id
FROM users u
INNER JOIN user_facility uf ON u.id = uf.fk_user_id
INNER JOIN marital_status ms ON u.fk_marital_status_id=ms.id
INNER JOIN users_roles ur ON u.id = ur.fk_user_id
于 2012-06-21T15:59:24.917 に答える
1

それは、最初に 3 つのテーブルを暗黙的に内部結合し、次に内部結合された 3 つのテーブルすべてに関連する 3 つの条件が一致した場合にのみ、結果を 4 番目のテーブルに明示的に左結合することによって得られるものです (つまり、3 番目の条件が false の場合、残りの 2 つのテーブルのいずれからも何も結合されていません)

暗黙的結合と明示的結合を組み合わせないことを強くお勧めします。私は個人的に常に明示的結合を使用しています。

外部結合が必要な場合:

SELECT ...
FROM users
LEFT JOIN user_facility ON users.id = user_facility.fk_user_id
LEFT JOIN marital_status ON users.fk_marital_status_id=marital_status.id
LEFT JOIN users_roles ON users.id = users_roles.fk_user_id

内部結合が必要な場合:

SELECT ...
FROM users
JOIN user_facility ON users.id = user_facility.fk_user_id
JOIN marital_status ON users.fk_marital_status_id=marital_status.id
JOIN users_roles ON users.id = users_roles.fk_user_id

または、あいまいな理由で暗黙的な内部結合を好む場合:

SELECT ...
FROM users,
     user_facility,
     marital_status,
     users_roles
WHERE users.id = user_facility.fk_user_id
  AND users.fk_marital_status_id=marital_status.id
  AND users.id = users_roles.fk_user_id

(暗黙の外部結合は、私の知る限り、すべての RDBMS で非推奨になっています)

于 2012-06-21T16:16:13.487 に答える