如果有记录,请使用join

时间:2016-01-24 11:12:03

标签: mysql sql

我是这样的查询:

select tractions.id,tractions.expired,tractions.succ,tractions.cradit_end_date,
                      tractions.user_id,users.family,tractions.coupon_code,users.username,traction_details.title,
                traction_details_sub.title as sub_title,tractions.coupon_parent,tractions.coupon_id,tractions.coupon_property_id
                from tractions,traction_details,traction_details_sub,users
                  WHERE
                  tractions.app='mobile'
                  AND tractions.succ = 1
                  AND tractions.user_id=$user_id
                  AND tractions.id = traction_details.tr_id
                  AND tractions.id = traction_details_sub.tr_id
                  AND tractions.user_id = users.id

现在,tractions中的某些记录在tr_id表中没有任何traction_details_sub

如何检查traction_details_sub表是否有tr_id然后加入这些表?

3 个答案:

答案 0 :(得分:1)

切换到ANSI连接(它们几乎普遍可用很长时间)并对可能没有记录的表使用外连接:

FROM

请注意此语法如何将表从LEFT OUTER JOIN子句移动到单独的连接中,WHERE指定具有可选行的表。另请注意ON子句的最后三个条件如何成为相应联接的t条件。最后,请注意使用表别名(即tractions dtraction_details straction_details_sub u } {}和users btnHindi}缩短查询。

答案 1 :(得分:0)

首先从traction_details中选择所有tr_id,然后重复你的sql查询添加条件IN tractions.id(所有id可用)

答案 2 :(得分:0)

traction_details_sub表使用左连接。如果没有匹配的记录,那么您将tds.title作为null

select t.id,t.expired,t.succ,t.cradit_end_date,
t.user_id,u.family,t.coupon_code,u.username,td.title,
tds.title as sub_title,t.coupon_parent,t.coupon_id,t.coupon_property_id
from 
tractions t 
    inner join 
traction_details td
    on t.id = td.tr_id

    left join 
traction_details_sub
    on t.id = tds.tr_id

    inner join 
users u 
    on t.user_id = u.id
WHERE
    t.app='mobile'
    AND t.succ = 1
    AND t.user_id=$user_id