1

結合ステートメントを作成することが理解できないようです。

select usrs.*
from
    students s
    join system_users usrs on
        s.father=usrs.user_id
        OR s.mother=usrs.user_id
        OR s.guardian=usrs.user_id
where s.user_id = '201209083'

私はこのクエリを持っています、そしてそれは返します:

+------------+---------+--------+--------+
| user_id    | contact | status | rights |
+------------+---------+--------+--------+
| f201209083 |    4093 | active | NULL   |
| g201209083 |    4095 | active | NULL   |
| m201209083 |    4094 | active | NULL   |
+------------+---------+--------+--------+

ここで必要なのは、連絡先列の情報を使用して詳細情報を取得し、それをこのテーブルに結合することです。

select
    *
from
    address
where
    contact_id = (contact column);

1つのクエリでそれを実装するのに助けが必要です。

PS誰かがこのテクニックが何と呼ばれているのか教えてもらえますか?JOINを検索するだけでは、これに関する情報を見つけることができません。または、学ぶためのリンクはさらに良いでしょう。

4

3 に答える 3

1

結合に複数のテーブルがあると、次のようにさらに多くのテーブルに結合し続けることができます。

Select a.*,usrs.*
from students s
join system_users usrs on s.father=usrs.user_id OR s.mother=usrs.user_id OR s.guardian=usrs.user_id
join addresses a on a.contact_id=usrs.contact
where s.user_id = '201209083'
于 2012-11-27T18:29:02.030 に答える
1

その現在のステートメントをサブクエリとして受け取り、そのように結合することができます。

SELECT * FROM address 
JOIN (
    SELECT 
        usrs.* 
    FROM 
        students s 
        JOIN system_users usrs ON s.father=usrs.user_id OR s.mother=usrs.user_id OR s.guardian=usrs.user_id 
    WHERE 
        s.user_id = '201209083'
) AS temp 
ON contact_id = (contact column);

これにより、元の結果と表の結果を組み合わせることができaddressます。

于 2012-11-27T18:29:09.853 に答える
1

1つのオプションは、最初のステートメントを変更して、評価対象の列のみを返すようにすることです。

select usrs.contact
from
    students s
    join system_users usrs on
        s.father=usrs.user_id
        OR s.mother=usrs.user_id
        OR s.guardian=usrs.user_id
where s.user_id = '201209083'

...そして、contact_idを評価するための条件としてそれを使用します。

SELECT
    *
FROM
    address
WHERE
    contact_id IN (
        SELECT usrs.contact
        FROM
            students s
            JOIN system_users usrs ON
                s.father=usrs.user_id
                OR s.mother=usrs.user_id
                OR s.guardian=usrs.user_id
        WHERE s.user_id = '201209083'
    )

これはしばしばサブクエリまたはサブセレクトと呼ばれ、4.1以降MySQLでサポートされています。contact_idが内部クエリによって返される値のいずれかに一致する場合、「IN」述語はtrueになります

于 2012-11-27T18:35:15.260 に答える