mysql 根据另外两个表中的条件从一个表中选择

ghhaqwfi  于 2023-02-28  发布在  Mysql
关注(0)|答案(1)|浏览(164)

我正在编写一个数据库验证查询,它将检查基于两个不同表的表中的非唯一数据。我有三个表,下面描述了它们的数据。

    • 客户可以有n个发票金额。**
    • 客户和发票可以有一个子公司。**

数据

可定制

customerid.   1 | currencyid.  10
customerid.   2 | currencyid.  12

可开票

invoiceid.  1|customerid.  1| currencyid.  10
invoiceid.  2|customerid.  1| currencyid.  10
invoiceid.  3|customerid.  1| currencyid.  12
invoiceid.  4|customerid.  2| currencyid.  12
invoiceid.  5|customerid.  2| currencyid.  12

辅助表

type.  customer| typeid. 1| subsidiaryid.   1
type.   invoice| typeid. 1| subsidiaryid.   1
type.   invoice| typeid. 2| subsidiaryid.   2
type.   invoice| typeid. 3| subsidiaryid.   2
type.  customer| typeid. 2| subsidiaryid.   2
type.   invoice| typeid. 4| subsidiaryid.   2
type.   invoice| typeid. 5| subsidiaryid.   2

示例

是否有一种方法可以编写查询来查找客户是否已将发票与非唯一子公司相关联?即,上述数据应返回错误,因为表中的第三个子公司具有另一个subsidiaryid,而前两个子公司具有另一个subsidiaryid,第四个子公司被忽略,因为它与另一种货币相关联。

预期结果

上面的查询应该返回customerid 1,因为它对客户和其中一张发票具有不同的子公司。Customerid 2对客户和与之关联的所有发票具有匹配的子公司。

oknwwptz

oknwwptz1#

要交叉引用两个表,一个简单的解决方案是以逗号分隔列表的形式使用多个表引用。
完成此操作后,您可以一次一行地比较select...from返回的值。
要查找任何不一致,请首先检查customer id是否相同,然后检查currency是否不同。

架构(MySQL v8.0)

create table custcurr (cust int,curr int);
create table invcustcurr (inv int,cust int,curr int);

insert into custcurr values (1,10),(2,12);
insert into invcustcurr values (1,1,10),(2,1,10),(3,1,12),(4,2,12),(5,2,12);

查询#1

select icc.inv,cc.* from custcurr cc,invcustcurr icc
where cc.cust=icc.cust and cc.curr<>icc.curr;

| 投资|客户|Curr|
| - ------|- ------|- ------|
| 三个|1个|十个|
View on DB Fiddle

相关问题