MySQL объединяется с LIMIT 1 из двух таблиц - PullRequest
2 голосов
/ 03 декабря 2009

У меня есть две таблицы. Один с информацией о свойствах. Другой хранит 3 изображения для каждого свойства. Из этих трех изображений одно помечается как «основное» изображение.

Итак, у меня есть:

Properties:
p_id    name
1   villa a
2   villa b
3   villa c
4   villa d

и

    Images
i_id p_id main
1    1     0
2    1     0
3    1     1
4    2     0
5    2     1
6    2     0

Мне нужно создать запрос, который возвращает все свойства с идентификатором их основного изображения. например,

p_id  name    i_id
1     villa a  3
2     villa b  5

Я знаю, что это потребует использования LIMIT 1 и объединения, но я не уверен, с чего начать, я уже пытался сделать это с помощью подзапроса, но чувствовал, что это должно быть менее сложно, чем то, что я делал ...

* КАК Я * Сделайте так, чтобы он упорядочивал запрос путем "main", выбирая верхнюю 1 (то есть, если main не установлена, он все равно будет выбирать изображение)?

Ответы [ 5 ]

2 голосов
/ 03 декабря 2009

Вот один из способов:

select      *
from        properties p
left join   images i 
on          p.p_id = i.p_id 
and         i.main = 1

При левом соединении возвращается пустое изображение, если основное изображение не найдено.

1 голос
/ 06 июня 2011
SELECT p.p_id, p.name i.i_id FROM properties p JOIN images i USING p_id where p_id = 1;
1 голос
/ 03 декабря 2009

Вот, пожалуйста:

SELECT p_id, name, i_id
FROM properties p INNER JOIN images i ON (p.p_id = i.p_id AND i.main = 1)

или

SELECT p_id, name, i_id
FROM properties p INNER JOIN images i ON (p.p_id = i.p_id)
WHERE i.main = 1
0 голосов
/ 03 декабря 2009

Вы хотите использовать запрос, подобный следующему:

SELECT p.p_id, p.name, i.i_id FROM Images i INNER JOIN Properties p ON p.p_id = i.p_id WHERE i.main = 1
0 голосов
/ 03 декабря 2009
select p.p_id, p.name, i.i_id 
from properties p join images i on p.p_id = i.p_id 
where i.main=1
...