2016-03-17 2 views
2

у меня есть только одна таблица: продуктыSQL совпадает со значением столбца со всеми значениями других столбцов

ID | Product Name | Code 1 | Code 2 | Code 3 
******************************************** 
1 | Phone1 | MM | DD | 
2 | Phone2 | DD |  | EE 
3 | Phone3 | MM | ZZ | EE 
4 | Phone4 | XX |  | 

Я хотел бы:

выбрать все телефоны, которые один из их кодов соответствуют одному из Телефон1.

Другими словами:

, если Phone1 [Код 1] = PHONE2 [код 1] или Phone1 [Код 1] = Phone2 [Код 2] ИЛИ Phone1 [Код 1] = Phone2 [Код 3] ИЛИ Phone1 [Код 1] = Phone3 [Код 1] ... и т.д.

Сравнить значение каждого PHONE1 столбца к значению каждого Phonex столбца. 3x3 условий = 9.

So он должен вернуть: Phone2 и Phone3 (он должен пропускать совпадения, где пусто = пусто).

Моя попытка (SELF JOIN) - Я новичок в этом и не может получить это право:

SELECT `a.Product Name` 
FROM products a, products b 
WHERE 
(`a.Code 1` = `b.Code 1`) OR 
(`a.Code 1` = `b.Code 2`) OR 
(`a.Code 1` = `b.Code 3`) OR 
(`a.Code 2` = `b.Code 1`) OR 
(`a.Code 2` = `b.Code 2`) OR 
(`a.Code 2` = `b.Code 3`) OR 
(`a.Code 3` = `b.Code 1`) OR 
(`a.Code 3` = `b.Code 2`) OR 
(`a.Code 3` = `b.Code 3`) 
AND `a.Product Name` = "Phone1"; 

Спасибо заранее!

ответ

2

Может быть что-то вроде этого.

SELECT p.* 
FROM Products p 
     JOIN Products p1 ON p1.`Product Name` = 'Phone1' 
          AND (p1.`Code 1` IN (p.`Code 1`,p.`Code 2`,p.`Code 3`) 
           OR p1.`Code 2` IN (p.`Code 1`,p.`Code 2`,p.`Code 3`) 
           OR p1.`Code 3` IN (p.`Code 1`,p.`Code 2`,p.`Code 3`)) 
WHERE p.`Product Name` <> 'Phone1' 

SQL Fiddle Demo

+0

Кроме того, несколько неуместны синтаксиса SQL Server, это выглядит, как он может работать. –

+0

@JoachimIsaksson ах да .. извините .. – JamieD77

+0

Спасибо! Какое лучшее место в этом заявлении поставить, если хотите: «НЕ IN»: выберите все телефоны, которые один из их кодов соответствует одному из кода Phone1 **, НО НЕ ЕСЛИ КОД = DD ** – weedtm

0

Должно быть, этот запрос

select `a.Product Name` from products as a 
left join products as b on a.`a.Code 1` = `b.Code 2` 
left join prodcuts as c on a.`a.Code 1` = `c.Code 3` 
where `a.Product Name` = "Phone1"; 
Смежные вопросы