我正在尝试编写一个SQL查询,该查询将在3个具有相同column_Id的表中选择一个学生的记录。
这是我写的,但是所选记录不正确:
select
Nov_DEC_billing.*,
Nov_DEC_students_portfolio.*,
admission_form.academic_year
from
Nov_DEC_billing,
Nov_DEC_student_portfolio,
admission_form
where
Nov_DEC_billing.ID = Nov_DEC_student_portfolio.ID=admission_form.ID
AND
admission_form.Program ='Nov/dec'
我选择了一条记录,但记录不正确。请联接包含相同column_id的3个表的正确方法是什么??
答案 0 :(得分:1)
在查询中使用JOIN
SELECT b.*, p.*, a.academic_year
FROM Nov_DEC_billing b
JOIN Nov_DEC_student_portfolio p ON p.id = b.id
JOIN admission_form a ON a.id = b.id
WHERE a.Program='Nov/dec'
答案 1 :(得分:0)
您需要像这样连接表:
SELECT Nov_DEC_billing.*,
Nov_DEC_students_portfolio.*,
admission_form.academic_year
FROM Nov_DEC_billing AS ndb,
LEFT JOIN Nov_DEC_student_portfolio AS ndsp ON ndsp.ID=ndb.ID,
LEFT JOIN admission_form AS af ON af.ID=ndb.ID
WHERE af.Program='Nov/dec'
答案 2 :(得分:0)
您应该将所有表合并到一个表中。 您要做的就是将所有表合并到一个表中,然后从中选择。 由于您有2个表,因此您应该首先联接2,然后再对结果联接另一个。 有关确切的语法,请参见left join example。
答案 3 :(得分:0)
Nov_DEC_billing.ID=Nov_DEC_student_portfolio.ID=admission_form.ID
没有完成您的期望。它采用第一部分Nov_DEC_billing.ID=Nov_DEC_student_portfolio.ID
并进行评估。如果值匹配,则该部分变为1
,如果它们不匹配,则其变为0
。然后将0
或1
与admission_form.ID
进行比较。那很可能会带来奇怪的结果。
所以您必须将其拆分为:
Nov_DEC_billing.ID=Nov_DEC_student_portfolio.ID
AND Nov_DEC_student_portfolio.ID=admission_form.ID
或者按照其他人已经建议的那样使用显式联接语法(我也这样做)。不管怎样,这迫使您将其拆分。