Agarwal1984 Ответов: 3

Как получить данные из двух таблиц слияния в SQL server?


Привет,

Мне нужны два стола:-
1. Таблица

Id|Размер|
1|abc
2|xyz
3|asd
4|fgh
5|ОПО

2. Таблица B

Id|TableAId1|TableAId2|TableAId3|TableAId4
1| 1 |2 |3 |4
2| 1 |5 |3 |4

результат должен быть отображен:
TableBId|Измерение
1|abc
1|xyz
1|asd
1|fgh
2|abc
2|поп
2|asd
2|fgh

так как же написать запрос для этого в sql server?

Пожалуйста, помогите мне.
заранее спасибо.

Анкит Агарвал
инженер-программист

Что я уже пробовал:

SELECT ta2.Id,ta1.Dimension
FROM tableA ta1
JOIN tableB ta2 on ta1.id != ta2.id
WHERE ta1.Id = ta2.TableAId1 and ta1.Id = ta2.TableAId2 and ta1.Id = ta2.TableAId3 and ta1.Id=ta2.TableAId3

[no name]

Эй, вы должны добавить объединение к решению, представленному в решении 1.Решение 1 не дает выхода 1|abc.
Проверьте мое решение в решении 3

3 Ответов

Рейтинг:
21

itsmypassion

SELECT ta2.Id,ta1.Dimension
FROM Tab1 ta1
JOIN TabB ta2 on ta1.id != ta2.id
WHERE ta1.Id = ta2.tabaid1 or ta1.Id = ta2.tabaid2 or ta1.Id = ta2.tabaid3 or ta1.Id=ta2.tabaid4


[no name]

Привет,пожалуйста, проголосуйте за мое решение.Ваше решение дает только 7 выходных данных.Проверьте мое решение ниже.

Рейтинг:
2

OriginalGriff

Попробуйте заменить и на или:

... WHERE ta1.Id = ta2.TableAId1 OR ta1.Id = ta2.TableAId2 ...
И требует, чтобы обе стороны были истинными, или требует, чтобы обе стороны были истинными, но не обязательно обе.


[no name]

Привет,пожалуйста, проголосуйте за мое решение.Ваше решение дает только 7 выходных данных.Проверьте мое решение ниже.

Рейтинг:
1

debasish mishra

CREATE TABLE TableA(ID int NOT NULL Primary Key,Description varchar(100));
Insert into TableA(ID,Description)values(1,'abc');
Insert into TableA(ID,Description)values(2,'xyz');
Insert into TableA(ID,Description)values(3,'asd');
Insert into TableA(ID,Description)values(4,'fgh');
Insert into TableA(ID,Description)values(5,'opo');
CREATE TABLE TableB([ID] int NOT NULL Primary Key,TableAid1 int NOT NULL ,TableAid2 int NOT NULL,TableAid3 int NOT NULL,TableAid4 int NOT NULL,
                   CONSTRAINT FK_tblBAid1 FOREIGN KEY (TableAid1)
    REFERENCES TableA(ID),CONSTRAINT FK_tblBAid2 FOREIGN KEY (TableAid2)
    REFERENCES TableA(ID),
                   CONSTRAINT FK_tblBAid3 FOREIGN KEY (TableAid3)
    REFERENCES TableA(ID),
                   CONSTRAINT FK_tblBAid4 FOREIGN KEY (TableAid4)
    REFERENCES TableA(ID));
Insert into TableB(ID,TableAid1,TableAid2,TableAid3,TableAid4)values(1,1,2,3,4);
Insert into TableB(ID,TableAid1,TableAid2,TableAid3,TableAid4)values(2,1,5,3,4);

SELECT ta2.Id,ta1.Dimension
FROM tableA ta1
JOIN tableB ta2 on ta1.id != ta2.id
WHERE ta2.TableAId1=ta1.Id OR ta2.TableAId2=ta1.Id  OR ta2.TableAId3=ta1.Id  OR ta2.TableAId3=ta1.Id
UNION
SELECT ta2.ID,ta1.Description
FROM tableA ta1
JOIN tableB ta2 on ta1.ID = ta2.ID
WHERE ta2.TableAId1=ta1.ID OR ta2.TableAId2=ta1.ID  OR ta2.TableAId3=ta1.ID  OR ta2.TableAId3=ta1.ID
or ta2.TableAId4=ta1.ID


Вышеприведенное решение связано с внешним ключом(Скрипка SQL[^])