Помощь в формировании SQL-запросов - PullRequest
0 голосов
/ 28 января 2011

Мне нужна помощь для создания запроса SQL (в MySQL).У меня есть две таблицы.Таблица 1 и Таблица 2 находятся на разных хостах / схемах БД.

В Table1 есть custid, tag, prod1id, prod2id, prod3id В Table2 есть custid, prodid

Теперь запрос состоит в обновлении тегаполе таблицы1.Поле должно быть равно 1, если записи prod1id, prod2id, prod3id также существуют в таблице 2 для определенного клиента.Вот пример

Table1

custid, tag, prod1id, prod2id, prod3id

1       1    12       13       14
2       0    24       25       26

Table2

custid, prodid
1       12
1       13
1       14
2       24
2       26

Поле тега для клиента # 2 - 0, потому что prod2id, который равен 25, не существует в Table2.Может ли кто-нибудь помочь мне в формировании запроса?

Ответы [ 3 ]

1 голос
/ 28 января 2011

Что-то вроде этого должно работать (у меня нет MySQL передо мной), поэтому оператор case может потребовать некоторой работы

 UPDATE 
     Table1
 SET 
     tag = Case 
                  WHEN t2p1.custid IS NOT NULL 
                       and t2p2.custID IS NOT NULL 
                       and t2p3.custId IS NOT NULL then 1
                  ELSE 0
                 END



FROM
     table1 t1
 LEFT JOIN Table2 t2p1
 on t1.custid = t2p1.custid   
    and t1.prod1id = t2p1.prodid

 LEFT JOIN Table2 t2p2
 on t1.custid = t2p2.custid
    and t1.prod2id = t2p2.prodid

 LEFTJOIN Table2 t2p3
 on t1.custid = t2p3.custid
    and t1.prod3id = t2p3.prodid
0 голосов
/ 28 января 2011

Вот способ, которым нам не нужно делать join (или exists) для каждого продукта:

UPDATE table1, (SELECT table1.custid, (COUNT(*) = 3) AS tag
                  FROM table1 JOIN table2 ON table1.custid = table2.custid
                 WHERE table2.prodid IN (table1.prod1id, table1.prod2id, table1.prod3id)
              GROUP BY table1.custid) newtags
SET table1.tag = newtags.tag
WHERE table1.custid = newtags.custid;
0 голосов
/ 28 января 2011

Это должно работать:

UPDATE Table1 t1
    SET tag=1 
    WHERE EXISTS(SELECT 1 FROM Table2 t2 WHERE t2.custId = t1.custId AND t2.prodId = t1.prod1Id)
    AND EXISTS(SELECT 1 FROM Table2 t2 WHERE t2.custId = t1.custId AND t2.prodId = t1.prod2Id)
    AND EXISTS(SELECT 1 FROM Table2 t2 WHERE t2.custId = t1.custId AND t2.prodId = t1.prod3Id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...