2017-02-08 4 views
0

продукцииКомбинат 2 или более таблиц в SQL таблице

products 
productid | sellerid | productprice 

sameproduct стол

sameproduct 
productid | sellerid | productprice 

продавцы таблица

sellers 
sellerid | sellername | selleraddress 

sellerid является внешним ключом к обоим продуктам таблицы и sameproduct. Я хочу показать детали продавца для конкретного продукта, который может присутствовать в обеих таблицах продуктов и того же продукта.

+1

Прежде всего, если обе таблицы имеют одинаковую структуру, тогда вы должны комбинировать. Если вы хотите организовать продукты разных типов или категорий, то вы можете добавить поле, например категорию или тип, и на основе того, что вы можете фильтровать. –

+0

@NaveedRamzan Не обязательно верно. 1: 1 - общий подход в реляционной модели для удаления нулевых значений. Кроме того, он может использоваться для повышения производительности таблиц, используемых в разных приложениях или разных ролях. Если большинство людей используют только 4 столбца, но есть один человек, которому нужно использовать 40 столбцов, то разделение таблицы улучшит производительность приложения для большинства людей. Также типичный подход для сегментации базы данных. –

ответ

0

Try что-то вроде:

select sellers.* from products 
inner join sellers on products.sellerid =sellers.sellerid 
where [email protected] 
UNION 
select sellers.* from sameproduct 
inner join sellers on sameproduct.sellerid =sellers.sellerid 
where [email protected] 
0

Вы можете UNION обе таблицы, и после этого что-то сделать:

SELECT * 
    FROM (
     SELECT * FROM products 
     UNION ALL SELECT * FROM sameproduct 
     ) AS p 
    JOIN sellers AS s ON (s.sellerid = p.sellerid) 
WHERE productid = @productid 
0

Вы можете JOINproducts и sellers таблицы, чтобы получить желаемый результат, например:

SELECT s.sellerid, s.sellername, s.selleraddress 
FROM sellers JOIN products p ON s.sellerid = p.sellerid 
WHERE p.productid = ? 

Обратите внимание, что это wil l возвращать несколько строк, если продукт имеет более одного продавца.

3

Это может помочь вам.

SELECT * 
FROM sellers 
    INNER JOIN sameproduct ON sellers.sellerid = sameproduct.sellerid 
    INNER JOIN products ON sellers.sellerid = products.sellerid 
0

Использование MySQL присоединиться три таблицы, называемые products, sameproduct и sellers:

select s.* 
from products p 
inner join sameproduct ps on p.sellerid = ps.sellerid 
inner join sellers s on ps.sellerid = s.sellerid 
where productid =in_product_id 
+1

Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего сообщения.Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. Также попробуйте не толковать код с пояснительными комментариями, что уменьшает читаемость кода и объяснений! – Carpetsmoker

0

Я думаю, это то, что вам нужно? Вы оставили таблицу продавцов в обеих таблицах и выбираете только записи, в которых productid находится в одной из двух таблиц продуктов.

declare @productid int 
set @productid = 1 

select s.*, p.productid, sp.productid 
    from sellers s 
    left join product p 
     on s.sellerid = p.sellerid 
    left join sameproduct sp 
     on s.sellerid = sp.sellerid 
    where p.productid = @productid 
     or sp.productid = @productid 
+0

Решение с UNION от AlbertoCh и Roman Tkachuk должно работать так же хорошо! –

0

Вы хотите показать продавцу для продукта, так что вы бы выбрать из таблицы продавцов (не присоединиться). Вы получаете идентификаторы продавца для продукта в предложении IN (или предложение EXISTS, если вы предпочитаете это).

select * 
from sellers 
where sellerid in (select sellerid from products where productid = 12345) 
    or sellerid in (select sellerid from sameproduct where productid = 12345); 

или

select * 
from sellers 
where sellerid in (select sellerid from products where productid = 12345 
        union all 
        select sellerid from sameproduct where productid = 12345); 

Это может быть preferrable, чтобы сделать продукты и sameproduct одну таблицу, однако.

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