SQL: выберите новый столбец, который имеет значение true, если строка (в другой таблице) существует - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть таблицы, столбцы которых выглядят так:

 Customer: cid, blah

 Product: pid, blah

 Order: cid, pid

Мне нужна таблица результатов, в которой есть эти столбцы:

cid, pid, (этот столбец 'true', если есть (cid, pid) этой строки в порядке, иначе "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

Ответы [ 3 ]

0 голосов
/ 24 ноября 2018

Вы можете 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;

PS order - ключевое слово, поэтому я заменил его на order_

Rextester Demo

0 голосов
/ 24 ноября 2018

это самый простой способ:

(
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)
)
0 голосов
/ 24 ноября 2018
 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 ;

Для этого вам необходим регистр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...