MySQL左外部连接验证?

MySQL左外部连接验证?,mysql,sql,validation,left-join,Mysql,Sql,Validation,Left Join,我有一个表,列出了位置和每个位置的可接受字段: 位置可接受字段 ----------------------------------------------------------| 位置\u地址 手机的位置 地点A小时地点B地址 位置\u B电话 现在,我有一个表,列出了我要针对第一个表验证的值 ID位置地址电话时间 ----------------------------------------------------------------------| 1位置A 123一些街道99999

我有一个表,列出了位置和每个位置的可接受字段:

位置可接受字段
----------------------------------------------------------|
位置\u地址
手机的位置
地点A小时
地点B地址
位置\u B电话

现在,我有一个表,列出了我要针对第一个表验证的值

ID位置地址电话时间
----------------------------------------------------------------------|
1位置A 123一些街道999999 8-5
2位置B 456一些St.99999 8 8-4现在,位置A通过了小时数验证,但是位置B列出了小时数,但根据验证表,不应如此。这应该是空的。我希望我的查询返回位置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;

有两种方法可以实现这一点:

使用左连接。您需要左键联接控制表三次(每个控制参数(即可接受字段)一次),并检查空值,如下所示:

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

让我们知道..您需要的输出是如示例所示的表1和表2中列出的位置值,即位置A与位置A?Hi-1。这是一个输入错误,两个都是位置A,位置B(在两个表中)。我试图获得的输出是:位置B 8-4