Я не знаю, возможно ли это, но может ли mysql выбрать суб и выбрать несколько записей?
Вот мой упрощенный запрос:
SELECT table1.*,
(
SELECT table2.*
FROM Table2 table2
WHERE table2.key_id = table1.key_id
)
FROM Table1 table1
В принципе, Table2 имеет X количество записей, которые мне нужно отменить в запросе, и я не хочу запускать вторичный запрос (например, получить результаты из таблицы 1, а затем перебрать эти результаты и затем получить все результаты из таблицы 2).
Благодарю.
Нет. Подзапрос в предложении SELECT
называется скалярным подзапросом. Скалярный подзапрос имеет два важных свойства:
Скалярный подзапрос - как следует из его названия - заменяет скалярное значение в выражении. Если подзапрос не возвращает строк, значение, используемое в выражении, равно NULL
.
В вашем случае вы можете использовать LEFT JOIN
:
SELECT t1.*, t2.*
FROM Table1 t1 LEFT JOIN
Table2 t2
ON t2.key_id = t1.keyid;
Обратите внимание, что псевдонимы таблиц - хорошая вещь. Однако они должны сделать запрос проще, поэтому повторение имени таблицы не является большой победой.
left join
должно делать то, что вы хотите.
MySQL может выполнить подзапрос, который возвращает несколько строк или несколько столбцов, но не подходит для этого в скалярном контексте.
Вы помещаете подзапрос в скалярном контексте. Другими словами, в списке выбора подзапрос должен возвращать один столбец и одну строку (или нулевые строки), потому что он будет использоваться для одного элемента в соответствующей строке, поскольку он использует список выбора для построения результата.
FROM
, а не вSELECT
.JOIN
нему ???