mariadb SELECT表基于使用UNION的多个表中的条件?

rjee0c15  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(140)

我有以下四张表:

产品

| 标识符|产品|单位|数量|日期_S|
| - -|- -|- -|- -|- -|
| 一个|虎田55|九零四|三十二个|2022年6月8日|
| 2个|泰斯卡|560 EHRS公司|四十四岁|2022年6月8日|
| 三个|谢拉|九零五|五十六人|2022年6月8日|
| 四个|泰斯卡|七零一|十二个|2022年6月8日|
| 五个|泰斯卡|英国国民议会|四十五|2022年6月8日|

空气

| 标识符|单位|区域|分部|
| - -|- -|- -|- -|
| 十二个|560 EHRS公司|FMC公司|DNB公司|
| 十四|小行星428| FMO公司|数据传输模型|

通信

| 标识符|单位|区域|分部|
| - -|- -|- -|- -|
| 十二个|英国国民议会|FMC公司|动态密钥管理|
| 十四|苯甲酮|FMO公司|驱动端|

弗洛

| 标识符|单位|区域|分部|类型_设备|装备|生产利用率|佩里奥德维丹热|队列视频(_V)|
| - -|- -|- -|- -|- -|- -|- -|- -|- -|
| 十四|九零四|FMC公司|DNBLS系统|马达和DG|柴油机|外壳|十五个|十二个|
| 二十三个|九零五|故障管理工程|DNBLS系统|马达和DG|柴油机|外壳|十五个|十二个|
| 二十二个|小行星906| FMO公司|DNBLS系统|马达和DG|柴油机|外壳|十五个|十二个|
| 二十一个|九一一|故障管理工程|DNBLS系统|马达和DG|柴油机|外壳|十五个|十二个|
| 五十五人|七零一|故障管理工程|DNBLS系统|马达和DG|柴油机|外壳|十五个|十二个|

预期输出

| 标识符|产品|单位|数量|日期_S|
| - -|- -|- -|- -|- -|
| 一个|虎田55|九零四|三十二个|2022年6月8日|
| 2个|泰斯卡|560 EHRS公司|四十四岁|2022年6月8日|
| 五个|泰斯卡|英国国民议会|四十五|2022年6月8日|
我已经尝试了这个查询:

SELECT * 
FROM Produit,
     Aéro 
WHERE Aéro.Unit = Produit.Unit 
  AND Aéro.region = 'FMC' 

UNION 

SELECT * 
FROM Produit,
     Commun 
WHERE Commun.Unit = Produit.Unit 
  AND Commun.region = 'FMC' 

UNION 

SELECT * 
FROM Produit,
     Flot 
WHERE Flot.Unit = Produit.Unit 
  AND Flot.region = 'FMC'

当我只根据“Commun”和“Aéro”表选择“Produit”时,它运行得很好。如果我只根据“Flot”表选择“Produit”,它也运行得很好。但是当我根据其他三个表选择“Produit”时,它返回错误。

ha5z0ras

ha5z0ras1#

如果你想提取所有产品,其单位与区域“FMC”相关,你可以从三个过滤表(“Aéro",“Commun”和“Flot”)中对单位应用UNION ALL,然后选择所有那些允许该单位在相应的“Produit.Unit"中的产品。

SELECT * 
FROM Produit 
WHERE Unit IN (SELECT Unit FROM Aéro   WHERE region = 'FMC'
               UNION ALL 
               SELECT Unit FROM Commun WHERE region = 'FMC'
               UNION ALL
               SELECT Unit FROM Flot   WHERE region = 'FMC')

检查演示here

注意UNION ALLUNION更有效率,因为它可避免大量的汇总。请检查here的差异。

相关问题