Какой тип JOIN я должен использовать здесь? - PullRequest
2 голосов
/ 22 февраля 2010

Я новичок в JOINS в MySql.

У меня есть шесть таблиц: t1, t2, t3, t4, t5, t6. И у меня также есть одна главная таблица: main_table. ИТОГО 7 СТОЛОВ!

Первый столбец ВСЕХ таблиц называется classified_id.

Если пользователь ищет «автомобили», то основная таблица будет соответствовать всему в таблице t1 (которая является таблицей автомобилей), где в обеих таблицах одно и то же класс_классы.

Итак:

   SELECT * FROM main_table, t1 WHERE main_table.classified_id=t1.classified_id

Это прекрасно работает, хотя я не уверен, что это способ присоединиться здесь. Производительность - проблема в моем случае!

Однако вот моя проблема. Всякий раз, когда производится поиск ВСЕХ КЛАССИФИЦИРОВАННЫХ , мне нужно сопоставить main_table.classified_id с другими столбцами таблиц classified_id и получить все имеющиеся в наличии объявления.

Как составить этот запрос?

    SELECT * FROM main_table, t1, t2, t3, t4, t5, t6 // I have this so far which is not much!

Если вам нужно больше информации, просто спросите, и я обновлю этот вопрос.

Спасибо

EDIT: Настройка стола:

     main_table:              t1:
     ID(PK)                   ID (PK)
     classified_id -> 25      classified_id     ->   25
     category  -> CARS        year     ->    1997

Ответы [ 2 ]

4 голосов
/ 22 февраля 2010

Если бы строка существовала во всех таблицах (т. Е. В каждой таблице есть строка для определенного классифицированного идентификатора), то вы бы использовали внутреннее соединение:

SELECT 
   m.classified_id
   ,m.category
   ,t1.year
   ,........
FROM 
   main_table m
   INNER JOIN t1 ON m.classified_id = t1.classified_id
   INNER JOIN t2 ON m.classified_id = t2.classified_id
   INNER JOIN t3 ON m.classified_id = t3.classified_id
   INNER JOIN t4 ON m.classified_id = t4.classified_id
   INNER JOIN t5 ON m.classified_id = t5.classified_id
   INNER JOIN t6 ON m.classified_id = t6.classified_id

Если строка не существует в каждой таблице, вы бы использовали LEFT JOINS, чтобы строки не удалялись

2 голосов
/ 22 февраля 2010

Использование:

   SELECT mt.*,
          t1.*,
          t2.*,
          t3.*,
          t4.*,
          t5.*,
          t6.*
     FROM MAIN_TABLE mt
LEFT JOIN TABLE_1 t1 ON t1.classified_id = mt.classified_id
LEFT JOIN TABLE_2 t2 ON t2.classified_id = mt.classified_id
LEFT JOIN TABLE_3 t3 ON t3.classified_id = mt.classified_id
LEFT JOIN TABLE_4 t4 ON t4.classified_id = mt.classified_id
LEFT JOIN TABLE_5 t5 ON t5.classified_id = mt.classified_id
LEFT JOIN TABLE_6 t6 ON t6.classified_id = mt.classified_id

Я использовал LEFT JOIN s, потому что, если бы использовалось JOIN - записи были бы опущены, у которых не было вспомогательной записи хотя бы в одной из таблиц t1 / 2/3/4/5/6. эта ссылка может оказаться полезной для понимания JOINs .

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