php - MySQL 将两个 SELECT 查询合并为一个检查重复值

标签 php mysql sql

给定这两个简单的查询:

SELECT materialID FROM materials WHERE compoundNumber = "<some user input1>";
SELECT materialID FROM materials WHERE vendorCompoundNumber = "<some user input2>";

如何将它们合并为一个查询,结果集如下所示:

materialID | compoundDupFound | vendorCompoundDupFound

1          |                0 |                      1

              - - or - -

2          |                1 |                      0 

              - - or - -

3          |                1 |                      1

我意识到我可以先执行一个,然后再执行另一个,但我想知道是否有一种巧妙的内置方式来构建查询以同时执行这两项操作。

compoundNumber 和 vendorCompoundNumber 列在数据库中必须是唯一的,因此我正在检查表单并确保用户输入的内容是唯一的。我将根据结果集显示错误消息。

最佳答案

可以使用OR运算符组合查询

SELECT materialID, compoundNumber AS compoundDupFound, vendorCompoundNumber AS vendorCompoundDupFound
FROM materials 
WHERE compoundNumber = "input1"
   OR vendorCompoundNumber = "input2";

根据评论,您似乎还需要知道哪些匹配。所以这又指向一个 UNION 语句,但是与谈论这条路径的其他答案相比有一个小的变化

SELECT materialID, compoundNumber AS compoundDupFound, NULL as vendorCompoundDupFound
    FROM materials 
    WHERE compoundNumber = "input1"
UNION
SELECT materialID, NULL, vendorCompoundNumber AS vendorCompoundDupFound
    FROM materials 
    WHERE vendorCompoundNumber = "input2"

这应该让您的输出尽可能接近原始问题。这样您将获得匹配的记录或 NULL,然后可以判断哪些是匹配的。

关于php - MySQL 将两个 SELECT 查询合并为一个检查重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23742294/

相关文章:

python - 让 SQL 引擎做约束检查或执行查询以预先检查约束

mysql - Order BY 根本不起作用

php - 如何在 Laravel 5.8 中更改应用程序名称

php - PHP 页面中的延迟响应

php - Laravel - 按出现次数获得前 5 名

PHP脚本超时

sql - 如何编写一个简单的数据库引擎

PHP(+ MaterializeCSS)联系表不发送消息

php - 飞行系统 v3 : issue using Local adapter

mysql - mySQL 中的多个条件