sql:如果行(在另一个表中)存在,则选择一个新列

nxowjjhe  于 2021-06-17  发布在  Mysql
关注(0)|答案(3)|浏览(294)

我有这样的表:

Customer: cid, blah

 Product: pid, blah

 Order: cid, pid

我需要具有以下列的结果表:
cid,pid,(当该行有(cid,pid)时,此列为'true',否则为'false')
例如:
顾客

1 blah

2 blah

3 blah

产品

1 blah

2 blah

3 blah

4 blah

秩序

1 2

1 3

2 1

2 4

3 3

我要查找具有以下结果的sql查询:

1 1 false

1 2 true

1 3 true

1 4 false

2 1 true

2 2 false

2 3 false

2 4 true

3 1 false

3 2 false

3 3 true

3 4 false

我正试图找出那个疑问,但仅限于我的知识。有人知道怎么写这个查询吗?
//对不起,忘了提一下,我想从客户和产品的花言巧语,以及结果

cid, blah, pid, blah, true/false
o4tp2gmn

o4tp2gmn1#

SELECT C.CID,P.PID,
  CASE WHEN C.CID,P.PID IN 
   (SELECT CID,PID from 
  ORDER)
  THEN "TRUE" END CASE
   CASE WHEN C.CID,P.PID NOT IN 
     (SELECT CID,PID from
   ORDER)
     THEN "FALSE" END CASE
          FROM CUSTOMER C,PRODUCT P ;

你需要一份案情陈述。

zbdgwd5y

zbdgwd5y2#

你可以 cross 以及 left 连接和 case..when 条件语句为:

select c.cid, p.pid,  
          ( case when o.cid*o.pid > 0 then 'true' else 'false' end ) 
                    as flag
     from product p
    cross join customer c
    left join order_ o on o.cid = c.cid and o.pid = p.pid   
   order by c.cid, p.pid;

p、 订单是一个关键字,所以我用订单代替了它_
rextester演示

yjghlzjz

yjghlzjz3#

这是最简单的方法:

(
SELECT O.cid, O.pid, 'true'
FROM order O 
Where (O.cid, O.pid) in
    (SELECT C.cid, p.pid, 
    FROM customer C CROSS JOIN product P)
)
UNION
(
SELECT O.cid, O.pid, 'false'
FROM order O 
Where (O.cid, O.pid) not in
    (SELECT C.cid, p.pid, 
    FROM customer C CROSS JOIN product P)
)

相关问题