mysql использует ВНУТРЕННЕЕ объединение для выбора нескольких таблиц?

#mysql #select #inner-join

#mysql #выберите #внутреннее объединение

Вопрос:

Я хочу выбрать все поля нескольких таблиц и получить результат отдельно, но mysql возвращает все строки вместе:

 SELECT prod_product.*
  ,pub_comment.* 
FROM prod_product 
INNER JOIN pub_comment ON (prod_product.id = pub_comment.itemId) 
WHERE prod_product.id=7744
  

Есть ли какой-либо способ, которым я мог бы извлекать строки каждой таблицы отдельно?

Я пытаюсь @prod:=prod_product.* , @comment:=pub_comment.* но mysql не позволил мне сохранить более 1 строки.

Комментарии:

1. @user703617: не забудьте принять правильный ответ, если вы его найдете.

Ответ №1:

Выполнить два запроса:

 select * from prod_product WHERE prod_product.id=7744
  

и

 select * from pub_comment WHERE pub_comment.itemId=7744
  

Один запрос всегда возвращает отдельные строки, содержащие два поля таблицы.
В любом случае: в чем проблема с объединением столбцов в одну строку? Если у вас возникли проблемы с их именами, вы можете использовать псевдонимы.

Комментарии:

1. Привет, Марко, спасибо за твой ответ, но это 2 запроса, и мне нужно уменьшить мои выборки из БД, возможно, мне придется это сделать

2. @user703617: Как я уже говорил, почему вы не можете использовать один запрос? В чем проблема наличия столбцов вместе?

3. @user703617: если вы дадите нам некоторые подробности, мы сможем помочь вам лучше 🙂

Ответ №2:

 SELECT @prod:= CONCAT_WS(',',prod_product.field1,prod_product.field2,...)
  ,@comment:= CONCAT_WS(' ',pub_comment.field1,pub_comment.field2,....) 
FROM prod_product 
INNER JOIN pub_comment ON (prod_product.id = pub_comment.itemId) 
WHERE prod_product.id = 7744
  

Обратите внимание, что CONCAT_WS разделит ваши поля, а CONCAT просто соберет их вместе.

Комментарии:

1. О, я должен предупредить вас о concat_ws, это выдало мне неприятную ошибку сортировки, когда таблица была в LATIN1, а система настроена на UTF8, тогда результат будет в UTF8, который не будет вставлен в таблицу LATIN1. Если вы получите этот обходной путь, используйте CONCAT(field1,’ ‘,field2,’ ‘…).