簡體   English   中英

MySQL左外部聯接驗證?

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

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