簡體   English   中英

MySQL查詢,在where子句中使用多個具有相同名稱的表字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM