My sub sub select и возвращает несколько записей из таблицы sub select

0

Я не знаю, возможно ли это, но может ли mysql выбрать суб и выбрать несколько записей?

Вот мой упрощенный запрос:

SELECT table1.*, 
(
SELECT      table2.*
FROM        Table2 table2
WHERE       table2.key_id = table1.key_id   
)
FROM Table1 table1 

В принципе, Table2 имеет X количество записей, которые мне нужно отменить в запросе, и я не хочу запускать вторичный запрос (например, получить результаты из таблицы 1, а затем перебрать эти результаты и затем получить все результаты из таблицы 2).

Благодарю.

  • 0
    Вы помещаете это в предложение FROM , а не в SELECT .
  • 0
    Почему бы просто не JOIN нему ???
Теги:
subquery

2 ответа

2

Нет. Подзапрос в предложении SELECT называется скалярным подзапросом. Скалярный подзапрос имеет два важных свойства:

  • Он может извлекать только один столбец.
  • Он может получать только нуль или одну строку.

Скалярный подзапрос - как следует из его названия - заменяет скалярное значение в выражении. Если подзапрос не возвращает строк, значение, используемое в выражении, равно NULL.

В вашем случае вы можете использовать LEFT JOIN:

SELECT t1.*, t2.*
FROM Table1 t1 LEFT JOIN
     Table2 t2
     ON t2.key_id = t1.keyid;

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

  • 0
    Хорошо, спасибо - вернемся к чертежной доске :)
  • 0
    @LargeTuna. , , left join должно делать то, что вы хотите.
1

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

Вы помещаете подзапрос в скалярном контексте. Другими словами, в списке выбора подзапрос должен возвращать один столбец и одну строку (или нулевые строки), потому что он будет использоваться для одного элемента в соответствующей строке, поскольку он использует список выбора для построения результата.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню