2010-08-06 3 views
0

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

У меня есть стол Orders с колонками ShipCity и OrderId. Я хотел бы получить значение OrderId от Orders, где ShipCity = Caracas. используя те различные значения OrderId, я хотел бы запросить другую таблицу с именем Order Details где [Детали заказа]. [OrderId] = [Заказы]. [OrderId] (= to 'Caracas').

я надеюсь это сделал. где я застрял, я уверен, что мне нужно будет создать некоторые переменные или временную таблицу для хранения этих значений, и у меня пока нет опыта с этими вещами. Буду признателен за любую помощь. Кроме того, это таблицы в базе данных образцов Northwind, если это помогает. ниже - фиктивный пример того, что я пытаюсь сделать.

Select OrderId 
FROM [Orders] 
WHERE ShipCity = 'Caracas' 

Select OrderId 
FROM [Order Details] 
WHERE OrderId = (Orders.ShipCity = 'Caracas') 

вот другой способ смотреть на него:

SELECT OrderId 
FROM [Order Details] 
WHERE OrderId = [Orders].ShipCity = 'Caracas' 

ответ

3

Вы хотите использовать INNER JOIN

SELECT [Order Details].* 
FROM [Order Details] 
INNER JOIN [Orders] ON [Orders].OrderId = [Order Details].OrderId 
WHERE [Orders].ShipCity = 'Caracas' 

Более подробную информацию о объединений можно найти in the Wikipedia entry или here.

+0

+1: Быстрее, чем я –

+0

Хорошо, теперь я только обо всем видел :) Спасибо! – LittleBobbyTables

3

вы используете предложение JOIN для объединения данных из двух или более таблиц. Нечто подобное, хотя вы должны дважды проверить синтаксис

select * 
from [Orders] o 
join [Order Details] od on o.orderid = od.orderid 
where o.shipcity = 'Caracas' 
1

Вам нужно соединить две таблицы:

SELECT DISTINCT o.OrderId 
FROM Orders o INNER JOIN [Order Details] od ON o.OrderId = od.OrderId 
WHERE o.ShipCity = 'Caracas' 

... но зачем вам нужна таблица Order Details в запросе?

0

Как обстоит дело с методом SubQuery?

SELECT OrderId 
FROM [Order Details] 
WHERE (OrderId IN SELECT OrderId FROM Orders WHERE ShipCity = 'Caracas') 
+0

Зачем вам использовать подзапрос, когда будет достаточно соединения? Кроме того, ваша левая скобка в инструкции WHERE должна находиться справа от IN. – LittleBobbyTables

+0

Как вы знаете, использование синтаксиса join делает SQL-сервер чрезмерно загруженным. Потому что он одновременно сканирует оба стола. Вот почему я использую подзапрос. – ppshein

+0

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

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