SQL выбрать из двух таблиц - PullRequest
0 голосов
/ 12 декабря 2011

Моя первая таблица как ниже (не важно):

tbl_Item

ItemId,ItemName
1     ,'test'
2     ,'test2'
3     , 'test3'

и вторая таблица (Важная таблица), эта таблица говорит нам, что ItemId имеет какие характеристики? Например ItemId 1 имеет спецификации 5 и 6 и 7

tbl_Spec

ItemId , SpecId
1      ,5
1      ,6
1      ,7
2      ,5
2      ,8
3      ,5
3      ,7

Как я могу выбрать элементы, которые имеют SpecId 5 и 7

результат должен быть:

ItemId
1
3

SQL In (...) выполняет ИЛИ по умолчанию, но я хочу что-то с And Function.

Моя СУБД - это SQL Server 2008

Ответы [ 7 ]

4 голосов
/ 12 декабря 2011

Я уверен, что должны быть более элегантные способы, но это должно дать вам то, что вы хотите (РЕДАКТИРОВАТЬ: исправлено в соответствии с предложением Михаэля Повага).

SELECT ItemId
FROM tbl_Spec
WHERE SpecId=5 OR SpecId=7
GROUP BY ItemId
HAVING COUNT(DISTINCT SpecId)=2

p.s. Али, если тебе нужно более легко расширяемое решение, ты видел ответ Микаэля Эрикссона?

3 голосов
/ 12 декабря 2011
declare @T table
(
  ItemId int,
  SpecId int
)

insert into @T values
(1      ,5),
(1      ,6),
(1      ,7),
(2      ,5),
(2      ,5),
(2      ,8),
(3      ,5),
(3      ,7),
(4      ,5),
(4      ,5)

;with C(SpecId) as
(
  select 5 union all
  select 7
)
select T.ItemId
from @T as T
  inner join C
    on T.SpecId = C.SpecId
group by T.ItemId
having count(distinct T.SpecId) = (select count(*) from C)

Результат:

ItemId
1
3
3 голосов
/ 12 декабря 2011
select itemid from
(
    select itemid from tbl_spec where specid = 5
) subset1 inner join
(
    select itemid from tbl_spec where itemid = 7
) subset2 on subset1.itemid = subset2.itemid
0 голосов
/ 12 декабря 2011
select * from (select Count(ItemID)Counted from tbl_Spec where Itemid in (select Itemid  from tbl_Item )and SpecId in(5,7) group by ItemID) a where Counted>=2
0 голосов
/ 12 декабря 2011
select distinct ItemId from tbl_Item, tbl_Spec 
where tbl_Item.ItemId=tbl_Spec.ItemId 
and tbl_SPec.SpecId not in (select SpecId from tbl_Spec where SpecId not in (5,7))

Я надеюсь, что это работает для вас.

0 голосов
/ 12 декабря 2011

Выполните следующий SQL-запрос

, выберите ItemId из tbl_Spec, где SpecId in (5,7)

0 голосов
/ 12 декабря 2011

Это даст желаемый результат, который вы запрашивали, но я не уверен на 100%, если это то, что вы просите.

select distinct itemID
from tbl_Spec
where SpecId in (5,7)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...