当我试图查询这个sql时,我得到了错误。
#1052 - Column 'charge_id' in where clause is ambiguous
下面是我的查询。
SELECT `inmate`.`inmate_id`,`inmate`.`fname`,`inmate`.`lname`,`inmate_case`.*,`case_information`.`case_id`,`case_charge`.*,`charge`.`charge_id` FROM inmate , `charge`
LEFT JOIN `prison`.`inmate_case` ON `inmate`.`inmate_id` = `inmate_case`.`inmate_id`
LEFT JOIN `prison`.`case_information` ON `inmate_case`.`case_id` = `case_information`.`case_id`
LEFT JOIN `prison`.`case_charge` ON `case_information`.`case_id` = `case_charge`.`case_id`
WHERE(( charge_id = 3))
必须有多个表,其中列名为charge_id
。因为你把它放在你的结果集中,你可以改变你的WHERE
子句
WHERE charge.charge_id = 3
如果您只需要名字和姓氏,那么您可以从选择中删除一些列-您必须提取多个名为charge_id
的列(可能来自case_charge
)。您可以将SELECT简化为如下内容:
SELECT inmate.inmate_id, inmate.fname, inmate.lname
FROM inmate
INNER JOIN prison.inmate_case ON inmate.inmate_id = inmate_case.inmate_id
INNER JOIN prison.case_information ON inmate_case.case_id = case_information.case_id
INNER JOIN prison.case_charge ON case_information.case_id = case_charge.case_id
INNER JOIN charge ON case_charge.charge_id = charge.charge_id
WHERE charge.charge_id = 3
并根据需要显式地向SELECT添加列。我将LEFT JOIN
s更改为INNER JOIN
s,因为您只需要出现在charge
表中的囚犯。如果你想拉那些可能出现在其他表中也可能不出现的囚犯,你可以使用OUTER JOIN
。(虽然他们仍然会在这种情况下工作,因为你把结束字段在WHERE
子句。如果不这样做,你就会把所有囚犯都遣返,即使他们根本没有任何案件或指控)。