2012-06-28 3 views
0

У меня есть две таблицы, Продукты и ProductImages, между отношениями между Продуктами и ProductImages. Я пытаюсь выполнить запрос в таблице Products с условием, что результаты содержат только строки с соответствующими записями в таблице ProductImages.Выберите 1 строку из таблицы, где существуют записи таблицы внешнего ключа

Products 
---------- 
id (PK) 

ProductImages 
--------------- 
id (PK) 
product_id (FK to Products) 

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

+0

которого одна строка? Любые? самый маленький идентификатор, самый большой идентификатор или что? – Imdad

+0

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

ответ

2
SELECT p.* FROM Products AS p 
INNER JOIN ProductImages AS pi ON p.id = pi.product_id 
GROUP BY p.id 
+0

Почему это лучше? – vearutop

+0

Мне тоже интересно, что-то немного нечеткое на Joins (никогда не мог обернуть голову вокруг разных) – nageeb

+0

'RIGHT JOIN' не лучше, чем' INNER JOIN' с точки зрения производительности для большинства случаев – vearutop

0
select * from products 
where id in (select product_id from ProductImages) 
+0

Спасибо, но это именно тот подзапрос, который я пытался избежать. – nageeb

2

пользователя join

SELECT * FROM Products INNER JOIN ProductImage on 
Products.id = ProductImage.product_id 
+1

Разве это не 'on Products.id = ProductImages.product_id'? – fancyPants

+0

@tombom, hmm fixed –

0
SELECT Products.* FROM Products 
INNER JOIN ProductImages ON Products.id = ProductImages.id 
and Products.Id = @ProductID // if required this condition