[英]MySQL Multiple SELECT queries with different WHERE clause on the same table
[英]MySQL Queries, using multiple table fields with the same name in a where clause
我有一个带有多个联接的select语句,每个联接都有一个名为“ created_on”的列名,有没有一种方法可以使查询的where部分将检查所有3个表? 这是我所做的实际查询
SELECT *
FROM household_address
JOIN catchment_area ON catchment_area.household_id = household_address.household_id
JOIN bhw ON catchment_area.bhw_id = bhw.user_username
JOIN master_list ON master_list.person_id = catchment_area.person_id
JOIN house_visits ON house_visits.household_id = household_address.household_id
WHERE catchment_area.household_id IN (
SELECT household_address.household_id
FROM demo.household_address
JOIN catchment_area ON catchment_area.household_id = household_address.household_id
JOIN previous_cases ON catchment_area.person_id = previous_cases.person_id
JOIN active_cases ON catchment_area.person_id = active_cases.person_id
JOIN ls_report ON ls_report.ls_household = household_address.household_name
WHERE DATE(created_on) BETWEEN '2014-03-01' AND '2014-03-31'
)
我正在谈论的联接是子查询中的联接。
首先,您应该像这样为每个表名创建一个别名,以使其更易于阅读和编写。
SELECT *
FROM household_address AS ha
JOIN catchment_area ca ON ca.household_id = ha.household_id
JOIN bhw bh ON ca.bhw_id = bh.user_username
JOIN master_list ml ON ml.person_id = ca.person_id
JOIN house_visits hv ON hv.household_id = ha.household_id
WHERE ca.household_id IN
(
SELECT ha1.household_id
FROM demo.household_address AS ha1
JOIN ca1 ON ca1.household_id = ha1.household_id
JOIN previous_cases pc ON ca1.person_id = pc.person_id
JOIN active_cases ac ON ca1.person_id = ac.person_id
JOIN ls_report ls_r ON ls_r.ls_household = ha1.household_name
WHERE DATE(ha1.created_on) BETWEEN '2014-03-01' AND '2014-03-31'
AND DATE(ca1.created_on) BETWEEN '2014-03-01' AND '2014-03-31'
AND DATE(pc.created_on) BETWEEN '2014-03-01' AND '2014-03-31'
AND DATE(ac.created_on) BETWEEN '2014-03-01' AND '2014-03-31'
AND DATE(ls_r.created_on) BETWEEN '2014-03-01' AND '2014-03-31'
)
对于创建日期的每个条件,您必须告诉它WHERE(table_name.created_on BETWEEN .....)
对每个表都这样做,这应该工作
尝试将别名与其他WHERE子句一起使用。
SELECT
*
FROM household_address
JOIN catchment_area ON catchment_area.household_id = household_address.household_id
JOIN bhw ON catchment_area.bhw_id = bhw.user_username
JOIN master_list ON master_list.person_id = catchment_area.person_id
JOIN house_visits ON house_visits.household_id = household_address.household_id
WHERE catchment_area.household_id IN (
SELECT household_address.household_id
FROM demo.household_address ha
JOIN catchment_area ca ON ca.household_id = ha.household_id
JOIN previous_cases pc ON ca.person_id = pc.person_id
JOIN active_cases ac ON ca.person_id = ac.person_id
JOIN ls_report ls_r ON ls_r.ls_household = ha.household_name
WHERE DATE(ha.created_on) BETWEEN '2014-03-01' AND '2014-03-31'
AND DATE(ca.created_on) BETWEEN '2014-03-01' AND '2014-03-31'
AND DATE(pc.created_on) BETWEEN '2014-03-01' AND '2014-03-31'
)
我实际上不知道哪三个表具有“ created_on”字段,因此我以household_address,catchment_area和previous_cases为例。 将其更改为您实际要搜索的内容。
(也应该为所有表名加上别名)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.