Как получить данные из нескольких таблиц на основе определенного значения столбца - PullRequest
0 голосов
/ 16 января 2019

Привет всем, я новичок в SQL, нужна ваша помощь в написании ниже запроса

у меня ниже таблицы

table1

code        ItemNo

A           12345
A           12346
A           12347
A           12348
B           12349
B           12350
B           12351
B           12352
C           12343
C           12354
C           12355
C           12356

table2

ItemNo          Value

12345           S
12346           S
12347           I
12348           B
12349           I
12350           S
12351           S
12352           S
12353           S
12354           S
12355           S
12356           S

Теперь мне нужно получить код из таблицы 1, передав ItemNo в предложение where, основываясь на том, что я получу код. Чем мне нужно получить все ItemNo, которые связаны с этим кодом, и если код имеет значение = S, а не другое значение, кроме печати, это ItemNo и код.

Ответы [ 3 ]

0 голосов
/ 16 января 2019

Вы можете попробовать это

Select table1.ItemNo, table1.Code, table2.Value from table1
inner join table2 on table1.ItemNo = table2.ItemNo
where table1.ItemNo = '12345'

Вы можете узнать это Присоединение к SQL Server

0 голосов
/ 16 января 2019

Если вы новичок в SQL, вам нужно понимать объединения таблиц и подзапрос. Я сделаю это один шаг за раз, надеюсь, это поможет.

SQL для создания и заполнения таблиц:

IF OBJECT_ID('tempdb..#tmpTable1') IS NOT NULL
  /*Then it exists*/
  DROP TABLE #tmpTable1

CREATE TABLE #tmpTable1 (
    code varchar(4) not null,
    ItemNo smallint not null )

insert into #tmpTable1 VALUES('A', 12345)
insert into #tmpTable1 VALUES('A', 12346)
insert into #tmpTable1 VALUES('A', 12347)
insert into #tmpTable1 VALUES('A', 12348)
insert into #tmpTable1 VALUES('B', 12349)
insert into #tmpTable1 VALUES('B', 12350)
insert into #tmpTable1 VALUES('B', 12351)
insert into #tmpTable1 VALUES('B', 12352)
insert into #tmpTable1 VALUES('C', 12353)
insert into #tmpTable1 VALUES('C', 12354)
insert into #tmpTable1 VALUES('C', 12355)
insert into #tmpTable1 VALUES('C', 12356)

IF OBJECT_ID('tempdb..#tmpTable2') IS NOT NULL
  /*Then it exists*/
  DROP TABLE #tmpTable2

CREATE TABLE #tmpTable2 (
    ItemNo smallint not null,
    Value varchar(4) not null )

insert into #tmpTable2 VALUES(12345, 'S')
insert into #tmpTable2 VALUES(12346, 'S')
insert into #tmpTable2 VALUES(12347, 'I')
insert into #tmpTable2 VALUES(12348, 'B')
insert into #tmpTable2 VALUES(12349, 'I')
insert into #tmpTable2 VALUES(12350, 'S')
insert into #tmpTable2 VALUES(12351, 'S')
insert into #tmpTable2 VALUES(12352, 'S')
insert into #tmpTable2 VALUES(12353, 'S')
insert into #tmpTable2 VALUES(12354, 'S')
insert into #tmpTable2 VALUES(12355, 'S')
insert into #tmpTable2 VALUES(12356, 'S')

SQL для вашего первого условия: «получить код из таблицы 1, передав ItemNo в предложение where» выберите t1.code из # tmpTable1 t1 где t1.ItemNo = 12350

Результат: код B

SQL, чтобы добавить ваше второе условие, "извлечь все ItemNo, которые связаны с этим кодом" Используйте исходный запрос как подзапрос.

select t1.ItemNo from #tmpTable1 t1 
where t1.code = (
    select t1.code from #tmpTable1 t1 
    where t1.ItemNo = 12350 )

Результат: Предмет номер 12349 12350 12351 12352

SQL, чтобы добавить ваше второе условие "и если код имеет только значение = S" Присоединитесь к Таблице 2, добавьте 'S' к где. «Напечатайте это ItemNo и код», добавьте код к выбору

select t1.ItemNo, t1.code from #tmpTable1 t1 
inner join #tmpTable2 t2 on t2.ItemNo = t1.ItemNo
where t1.code = (
    select t1.code from #tmpTable1 t1 
    where t1.ItemNo = 12350 )
and t2.Value = 'S'

Результат: Код товара 12350 В 12351 Б 12352 B

0 голосов
/ 16 января 2019

Я думаю, вам нужно not exists:

with cte as (
     select t1.code, t1.itemno, t2.value
     from table1 t1 inner join
          table2 t2
          on t1.itemno = t2.itemno
)
select c.*
from cte c
where not exists (select 1 from cte c1 where c1.code = c.code and c1.value <> 'S')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...