2013-11-20 6 views
0

Я хотел бы объединить две таблицы в один вид.Объединить две таблицы в один вид

В настоящее время первая таблица содержит 4 колонки

ID | CatID | ImmID | Cost 

Второй также 4 колонки

ID | CatID | ImmID | Price 

Я хотел бы объединить их, чтобы объединенная таблица будет иметь 5 колонок

ID | CatId | ImmId | Cost | Price 

В случае, если catID присутствует в обоих таблицах, я хотел бы иметь только одну запись , и если catID является ценным в одной из двух таблиц, я бы хотел поставить 0 в колонке «Стоимости» или «Столбец»

Итак, 3 случая.

Это мой текущий запрос

SELECT first.CatID, first.ImmID, first.Cost, 0 
FROM costs first 
UNION 
SELECT second.CatID, second.ImmID, 0, second.Price 
FROM prices second 

, но он не работает, потому что для одного CatID, две записи возвращаются

12| 15| 80| 1500 | 0 
12| 15| 80| 0 | 700 

Вместо того, чтобы один, который будет выглядеть

12| 15| 80| 1500| 700 
+0

Две записи жаль не mentionning это – Max

ответ

0

ОК, попробуйте это сейчас - это должно сделать это:

--This query will return only one row if ID is common** 
SELECT a.Id, a.CatId, a.ImmID, a.Cost, b.Price 
FROM first a, second b 
WHERE a.CatID=b.CatID 
    union 
--this query will return only value from first table with price 0** 
SELECT a.Id, a.CatId, a.ImmID, a.Cost, 0 
FROM first a, second b 
WHERE a.CatID<>b.CatID 
    union 
--this query will return only value from second table with cost 0** 
SELECT b.Id, b.CatId, b.ImmID, 0, b.Price 
FROM second b, first a 
WHERE b.CatID<>a.CatID 
+0

он не работает, так как CatIDs, которые не находятся в обеих таблицах не отображаются – Max

+0

вместо использования a.Id = b.Id, и можно использовать a.CatID = b.CatID. Идея предполагает, что она правильная. – saif

+0

попробуйте сейчас мой друг ..... – saif

0

Будет ли это делать трюк?

SELECT second.ID, first.CatID, first.ImmID, first.Cost, second.Price 
FROM costs first , prices second 
WHERE first.CatID = second.CatID 
+0

нет, потому что если catId нет в обеих таблицах, я хочу, чтобы он появился с 0 по цене (если он был только в таблице затрат) или 0 по стоимости (если он был только в таблице цен) – Max

+0

hmm, не уверенный в понимании дизайна вашей базы данных и ограничений целостности ... – user2196728

Смежные вопросы