我是这样的查询:
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
然后加入这些表?
答案 0 :(得分:1)
切换到ANSI连接(它们几乎普遍可用很长时间)并对可能没有记录的表使用外连接:
FROM
请注意此语法如何将表从LEFT OUTER JOIN
子句移动到单独的连接中,WHERE
指定具有可选行的表。另请注意ON
子句的最后三个条件如何成为相应联接的t
条件。最后,请注意使用表别名(即tractions
d
,traction_details
s
,traction_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