sql >> データベース >  >> RDS >> Mysql

SQLWHEREINをJOINに変換します

    私はあなたがやろうとしていることを理解していると思います。猫の皮を剥ぐ方法は複数ありますが、クエリを2つの別々のクエリに分割し、複雑なWHERE句をいくつかの内部結合に置き換えることをお勧めしますか?だから、このようなもの:

    /* Find connections based on health care */
    SELECT p2.p_id as id, p2.fname, p2.lname, p2.image
    FROM person p
    JOIN health_case hc on hc.patient = p.p_id
    JOIN health_case hc2 on hc2.doctor = hc.doctor and hc2.healthcenter = hc.healthcenter and hc.start <= hc2.end and hc.end >= hc2.start and hc2.patient <> hc.patient
    JOIN person p2 on p2.p_id = hc2.patient and p2.p_id <> p.p_id
    WHERE p.p_id = :id
    

    次に、教育に基づいて接続を取得するための別のクエリを作成します。

    /* Find connections based on education */
    SELECT p2.p_id as id, p2.fname, p2.lname, p2.image
    FROM person p
    JOIN education e on e.pupil = p.p_id
    JOIN education e2 on e2.school = e.school and e2.start <= e.end AND e2.end >= e.start and e.pupil <> e2.pupil
    JOIN person p2 on p2.p_id = e2.pupil and p2.p_id <> p.p_id
    WHERE p.p_id = :id
    

    データ結果を本当に結合したい場合は、UNIONを使用できます。 どちらのクエリもpersonテーブルから同じ列を返すためです。



    1. OracleのSQLクエリで固定数の行をフェッチします

    2. データベース値を使用してforeachループにテーブルを表示します

    3. PostgreSQLはテーブル(フラグメント)の透過的な圧縮をサポートしていますか?

    4. 空の行を挿入し、自動番号を正しく更新するにはどうすればよいですか?