web-dev-qa-db-ja.com

1回のクエリで複数のMySQLがジョインする?

次のような質問があります。

SELECT
  dashboard_data.headline,
  dashboard_data.message,
  dashboard_messages.image_id 
FROM dashboard_data
INNER JOIN dashboard_messages
  ON dashboard_message_id = dashboard_messages.id

だから私はINNER JOINを使っていてimage_idをつかんでいます。だから今、私はそのimage_idを取得し、それをimagesテーブルからimages.filenameに変換したいと思います。

それをクエリに追加するにはどうすればよいですか。

98
Drew

次のように単純に別の結合を追加することができます。

SELECT dashboard_data.headline, dashboard_data.message, dashboard_messages.image_id, images.filename
FROM dashboard_data 
    INNER JOIN dashboard_messages 
        ON dashboard_message_id = dashboard_messages.id
    INNER JOIN images
        ON dashboard_messages.image_id = images.image_id 

ただし、INNER JOINなので、画像のないメッセージがある場合は、行全体がスキップされます。これが可能な場合は、すべてのダッシュボードメッセージとimage_filenameが存在する場合にのみそれを返すLEFT OUTER JOINを実行することをお勧めします(そうでない場合はnullになります)。

SELECT dashboard_data.headline, dashboard_data.message, dashboard_messages.image_id, images.filename
FROM dashboard_data 
    INNER JOIN dashboard_messages 
        ON dashboard_message_id = dashboard_messages.id
    LEFT OUTER JOIN images
        ON dashboard_messages.image_id = images.image_id 
176
Code Magician

別の参加を追加するだけです。

SELECT dashboard_data.headline,
       dashboard_data.message,
       dashboard_messages.image_id,
       images.filename 
FROM dashboard_data 
    INNER JOIN dashboard_messages
            ON dashboard_message_id = dashboard_messages.id 
    INNER JOIN images
            ON dashboard_messages.image_id = images.image_id
9
Brian Driscoll

1回のSQLクエリで2つのLEFT JOINを使用した経験を共有しました。

私は3つのテーブルがあります。

表1)患者は列PatientID、PatientNameで構成されています

表2)予定は列AppointmentID、AppointmentDateTime、PatientID、DoctorIDで構成されています

表3)Doctorは、DoctorID列、DoctorName列から構成されています。


クエリ:

SELECT Patient.patientname, AppointmentDateTime, Doctor.doctorname

FROM Appointment 

LEFT JOIN Doctor ON Appointment.doctorid = Doctor.doctorId  //have doctorId column common

LEFT JOIN Patient ON Appointment.PatientId = Patient.PatientId      //have patientid column common

WHERE Doctor.Doctorname LIKE 'varun%' // setting doctor name by using LIKE

AND Appointment.AppointmentDateTime BETWEEN '1/16/2001' AND '9/9/2014' //comparison b/w dates 

ORDER BY AppointmentDateTime ASC;  // getting data as ascending order

私は "mm/dd/yy"のような日付フォーマット (私の名前 "VARUN TEJ REDD"のように)を得るための解決策を書きました。

8
Varun Tej Reddy

SQLでのマルチジョインは、派生テーブルを次々に作成することによって機能します。プロセスを説明するこのリンクを参照してください。

https://www.interfacett.com/blogs/multiple-joins-work-just-like-single-joins/

0
Mohit