2014-10-07 4 views
0

У меня есть таблица с обоими продуктами и элементами. И я хранил товарные бренды, наименования продуктов и имена услуг на отдельных таблицах.Сочетание 3 запросов на SQL

Я получаю список услуг с этим запросом:

SELECT maeinvs.idInv, CONCAT(services.Service, " ", maeinvs.Detail) AS Name 
FROM maeinvs 
INNER JOIN services 
ON services.idService = maeinvs.idService 

И список продуктов с этим:

SELECT maeinvs.idInv, CONCAT(brands.Brand, " ", products.Product, " ", maeinvs.Detail) AS Name 
FROM maeinvs 
INNER JOIN products 
ON products.idProduct = maeinvs.idProduct 
INNER JOIN brands 
ON brands.idBrand = maeinvs.idBrand 

Мне нужно, чтобы получить запрос, как это, но вместо idInv поле Мне нужно фактическое Имя продукта или услуги. Есть идеи?

SELECT idInv, Desc, Qnty, Price 
FROM invoicedetails 
WHERE idInvoice = $id 

Спасибо.

+1

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

ответ

0

Я до сих пор не знаю, как сделать это в одном запросе (я просто знаю основы, псевдоним?), Но решил, что делать VIEW, а затем РЕГИСТРИРУЙТЕСЬ с моим Детали_Счетов таблицы.

ВИД:

SELECT maeinvs.idInv, CONCAT(services.Service, " ", maeinvs.Detail) AS Name 
FROM maeinvs 
INNER JOIN services 
ON services.idService = maeinvs.idService 
UNION 
SELECT maeinvs.idInv, CONCAT(brands.Brand, " ", products.Product, " ", maeinvs.Detail) AS Name 
FROM maeinvs 
INNER JOIN products 
ON products.idProduct = maeinvs.idProduct 
INNER JOIN brands 
ON brands.idBrand = maeinvs.idBrand 

QUERY:

SELECT viewnames.Name, invoicedetails.Desc, invoicedetails.Qnty, invoicedetails.Price 
FROM invoicedetails 
INNER JOIN viewnames ON viewnames.idInv = invoicedetails.idInv 
WHERE invoicedetails = $id 
0
SELECT maeinvs.idInv, CONCAT(services.Service, " ", maeinvs.Detail) AS Name, 
"" AS Desc, 0 AS Qnty, 0 AS Price 
FROM maeinvs 
INNER JOIN services 
ON services.idService = maeinvs.idService 
UNION 
SELECT maeinvs.idInv, CONCAT(brands.Brand, " ", products.Product, " ", maeinvs.Detail) AS Name, 
"" AS Desc, 0 AS Qnty, 0 AS Price 
FROM maeinvs 
INNER JOIN products 
ON products.idProduct = maeinvs.idProduct 
INNER JOIN brands 
ON brands.idBrand = maeinvs.idBrand 
UNION 
SELECT idInv, 
"" AS Name, 
Desc, Qnty, Price 
FROM invoicedetails 
WHERE idInvoice = $id 

Я написал то, что я изменил на следующей строке
Поскольку столбцы совпадают друг с другом, UNION будет работать.

+0

Это дает мне весь инвентарь, мне нужен UNION, а затем JOIN, чтобы получить только детали счета. В любом случае, спасибо за ваш ответ, это поможет мне найти решение. – Arxk