JOIN возвращает несколько результатов, когда только одна запись соответствует предложению WHERE? - PullRequest
2 голосов
/ 06 января 2012
SELECT images.filename, slugs.name FROM images, slugs
WHERE images.status = 1 AND slugs.name = 'test'

Тем не менее, у меня есть только 1 запись, где slugs.name = 'test' истинно!

Что происходит?

Ответы [ 6 ]

7 голосов
/ 06 января 2012

Другие указывают на то, что у вас неправильно (что вы получаете декартово соединение), но не как это исправить. Нам нужно знать, как строки в images связаны со строками в slugs. Если, скажем, есть столбец с именем BingoID в обоих, который должен совпадать, то что-то вроде:

SELECT images.filename, slugs.name FROM images, slugs
WHERE images.status = 1 AND slugs.name = 'test' AND images.BingoID = slugs.BingoID

или

SELECT images.filename, slugs.name
FROM images inner join slugs
   ON images.BingoID = slugs.BingoID
WHERE images.status = 1 AND slugs.name = 'test'
2 голосов
/ 06 января 2012

Как связаны таблицы изображений и слагов?Я думаю, что вам нужно добавить внутреннее объединение, поскольку ваш запрос вернет столько слагов с именем «test», сколько записей в таблице изображений.

2 голосов
/ 06 января 2012

но у вас, вероятно, есть два images.status = 1.
Они, как вы написали, это почти полное соединение, декартово умножение.

1 голос
/ 06 января 2012

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

Вы должны попробовать правое внешнее объединение, чтобы получить один результат, попробуйте это

SELECT images.filename, slugs.name FROM images right outer join slugs
   on images.ID = slugs.ID
where images.status = 1 AND slugs.name = 'test'
1 голос
/ 06 января 2012

Есть большая вероятность, что он выполняет неявное естественное объединение, потому что вы выбираете одну из двух таблиц, подобных этой.

1 голос
/ 06 января 2012

Это потому, что у вас более одного images.status = 1:)

Ваш запрос соответствует всем строкам таблицы images, имеющим status = 1, всем строкам таблицы slugs, имеющим name = 'test'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...