[英]MySQL Left Outer Join Validation?
我有一張表,列出了位置以及每個位置的可接受字段:
位置可接受的字段
-------------------------------------------------- -------- |
Location_A地址
Location_A電話
Location_A Hours
Location_B地址
Location_B電話
現在,我有了一個表,該表列出了要針對第一個表進行驗證的值。
身份證位置地址電話時間
-------------------------------------------------- -------------------- |
1地址A 123 Some St.9999999 8-5
2 Location B 456 Some St.9999998 8-4
現在,位置A通過了小時數驗證,但是位置B列出了小時數,但是根據驗證表,它不應該。 這應該為NULL。 我希望查詢返回位置B 8-4。 這是我的MySQL語句,顯然不起作用:
SELECT Table2.Location, Table2.Hours
FROM
Table1 LEFT OUTER JOIN Table2
ON
Table1.Location = Table2.Location
WHERE
Table2.Hours is not null
AND Table1.Acceptable_Fields != 'Hours';
這個怎么樣?
SELECT Table1.Location, Table1.Acceptable_Fields
FROM Table1 RIGHT JOIN
(
SELECT Location, 'Address' AS col_name, Address AS col_val
FROM Table2
UNION ALL
SELECT Location, "Phone" AS col_name, Phone AS col_val
FROM Table2
UNION ALL
SELECT Location, "Hours" AS col_name, Hours AS col_val
FROM Table2
) T3 ON Table1.Location = Table3.Location
AND Table3.col_name = Table1.Acceptable_Fields
WHERE Table3.col_name IS NULL AND TAble3.col_val IS NOT NULL;
有兩種方法可以實現此目的:
使用LEFT JOIN。 您將需要離開控制表3次(對於每個控制參數一次,即接受字段),並檢查是否為NULL,如下所示:
SELECT t2.ID,
t2.Location,
CASE WHEN a.Acceptable_Fields IS NOT NULL THEN t2.Address END Address,
CASE WHEN p.Acceptable_Fields IS NOT NULL THEN t2.Phone END Phone,
CASE WHEN h.Acceptable_Fields IS NOT NULL THEN t2.Hours END Hours
FROM
Table2 t2
LEFT OUTER JOIN Table1 a ON
t2.Location = a.Location AND a.Acceptable_Fields = 'Address'
LEFT OUTER JOIN Table1 p ON
t2.Location = p.Location AND p.Acceptable_Fields = 'Phone'
LEFT OUTER JOIN Table1 h ON
t2.Location = h.Location AND h.Acceptable_Fields = 'Hours'
使用子查詢:
SELECT t2.ID,
t2.Location,
CASE WHEN EXISTS(SELECT 1 FROM Table1 WHERE Location = t2.Location AND Acceptable_Fields = 'Address') THEN t2.Address END Address,
CASE WHEN EXISTS(SELECT 1 FROM Table1 WHERE Location = t2.Location AND Acceptable_Fields = 'Phone') THEN t2.Phone END Phone,
CASE WHEN EXISTS(SELECT 1 FROM Table1 WHERE Location = t2.Location AND Acceptable_Fields = 'Hours') THEN t2.Hours END Hours
FROM
Table2 t2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.