MySQL поиск по двум таблицам с некоторым внутренним объединением - PullRequest
0 голосов
/ 21 июня 2009

таблица estate_common -> общие данные по имуществу в качестве названия и т. Д. Имущество может отличаться по виду например, вид 1 - квартира, вид 2 - дом и т. д.

id  | kind | title     | name
596 | 1    | title 596 | name 596
597 | 1    | title 597 | some 597
598 | 1    | title 598 | some 598
599 | 1    | title 599 | some 599
600 | 1    | title 600 | some 600
601 | 5    | title 607 | some 601

таблица estate_kind_1 -> специфические данные для каждого типа подсети estate_kind_# имеет столбцы структуры различия и т. Д.

id | estate_common_id | floor | flat | shell
1  | 596              | 250   | 9b   | pvc
2  | 597              | 156   | 10c  | abc
3  | 598              | 126   | 12a  | csd
4  | 599              | 226   | 2a   | add
5  | 600              | 198   | 15o  | fdd

id из estate_common равно estate_common_id из estate_kind_#, где # - это число kind из таблицы estate_common

перед подготовкой запроса я знаю, что должен объединить данные из таблицы estate_common и estate_kind_1

для простой детализации недвижимости с данными из обеих таблиц это просто

SELECT `common`.*, `kind`.* FROM `estate_common` AS `common` INNER JOIN `estate_kind_1` AS `kind` ON common.id = kind.estate_common_id WHERE (common.id = '597')

, но теперь я начинаю делать некоторые экспортные XML-файлы и мне нужно выбрать данные из обеих таблиц означает estate_common и estate_kind_1 при выборе estate_common id´s

так что запрос такой

SELECT `common`.*, `kind`.* FROM `estate_common` AS `common`, `estate_kind_1` AS `kind` WHERE (common.id IN ('596,597'))

но это дает мне странный результат

id  | kind | title     | name     | id | estate_common_id | floor | flat | shell
596 | 1    | title 596 | name 596 | 1  | 596              | 250   | 9b   | pvc
596 | 1    | title 596 | name 596 | 2  | 597              | 156   | 10c  | abc

данные из таблицы estate_kind_1 означает, что с идентификатором 1 a 2 с правой стороны все в порядке, но слева от estate_common для обеих строк одинаковы

должно быть

id   | kind | title     | name   | id | estate_common_id | floor | flat | shell
596  | 1    | title 596 | name 596 | 1  | 596              | 250   | 9b   | pvc
597  | 1    | title 597 | name 597 | 2  | 597              | 156   | 10c  | abc

я попробовал группу по-разному и т. Д. Но, вероятно, неправильно буду рад любой помощи

спасибо

Ответы [ 3 ]

1 голос
/ 21 июня 2009

Ваш последний запрос не имеет явного JOIN, поэтому выполняется INNER JOIN. Поскольку также нет условия ON, то, что происходит, является полностью перекрестным продуктом с ограничением на одну таблицу. Результат, который вы должны получить, состоит в том, что для каждой строки kind у вас будет два результата - один для 596 из common и один для 597.

Полагаю, вы обрезали результат на 2 строки.

Требуемый запрос:

SELECT `common`.*, `kind`.* 
  FROM `estate_common` AS `common`, `estate_kind_1` AS `kind` 
  ON common.id = kind.estate_common_id
  WHERE (common.id IN ('596,597'));
0 голосов
/ 21 июня 2009

решение действительно простое

SELECT common.*, kind.* FROM estate_common common, estate_kind_1 kind WHERE common.id = kind.estate_common_id AND (common.id IN (596,597))
0 голосов
/ 21 июня 2009

Я, должно быть, что-то упускаю из твоего вопроса. Это то, что вы хотите?

SELECT `common`.*, `kind`.*
FROM `estate_common` AS `common`
     INNER JOIN `estate_kind_1` AS `kind` ON common.id = kind.estate_common_id
WHERE common.id IN ('596,597')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...