MySQL 左外连接验证?

标签 mysql sql validation left-join

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

位置 可接受字段
---------------------------------------------- ------|
Location_A 地址
Location_A 电话
位置_A 营业时间
位置_B 地址
Location_B 电话

现在,我有一个表,其中列出了我要根据第一个表验证的值。

ID 位置 地址 电话 营业时间
---------------------------------------------- ------------------|
1 地点 A 123 Some St. 9999999 8-5
2 地点 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;

关于MySQL 左外连接验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23402040/

相关文章:

php - 根据 PHP 列检索最后插入的 id

sql - 检查文件是否存在?

sql - ALTER TABLE 语句中的 DEFAULT 子句导致语法错误

有效密码的单元格上的 Excel 公式

jquery - 如何在浏览器验证具有 'required' 属性的字段后禁用提交按钮?

javascript - 电话号码验证 Angularjs

PHP - 无法从另一个类访问数据库连接器类。我究竟做错了什么?

mysql - 为 sql 表中的重复项设置标志

c# - mysql 创建唯一索引,索引名称中带有空格

mysql select between two dates 有奇怪的行为