Звучит так, будто вы хотите объединение, а не объединение.
Вам не нужно ничего сравнивать, чтобы сделать соединение. В результате вы получаете перекрестный продукт, если не указали условия объединения:
SELECT t20.*, t1.*
FROM table_with_20_columns AS t20
LEFT OUTER JOIN temp_table_with_1_column AS t1 ON (1=1);
Если в таблице temp есть ноль строк, в результате вышеприведенного запроса она будет указана как NULL.
Однако, если во временной таблице несколько строк, вы получите перекрестный продукт с первой таблицей. Я не могу сказать из твоего вопроса, чего ты хочешь.
edit: Условие соединения, выраженное в предложении ON
или USING
, должно быть необязательным в соответствии со стандартом SQL, но, по крайней мере, когда я проверяю его в MySQL 5.0, это синтаксическая ошибка для опустить этот пункт. Но вы можете использовать ON (1=1)
.
edit: Отвечая на ваш вопрос в комментарии:
SELECT COALESCE(reqhead_rec.resp_name, dflt.resp_name) AS resp_name
FROM (SELECT 'default name' AS resp_name) dflt
LEFT OUTER JOIN reqhead_rec ON (1=1)
WHERE reqhead_rec.req_no = biglist.req_no AND reqhead_rec.frm = biglist.req_frm
INTO TEMP grabname WITH NO LOG;
На самом деле, вы можете вообще пропустить временную таблицу. Просто оставьте свой главный стол на reahead_rec
. Поместите эти условия в предложение ON
объединения, а не в предложение WHERE
. Затем используйте COALESCE()
в списке выбора этого запроса, чтобы дать имя по умолчанию, если оно не найдено в другой таблице.
SELECT b.*, COALESCE(r.resp_name, 'default name') AS resp_name
FROM biglist AS b
LEFT OUTER JOIN reqhead_rec AS r
ON (b.req_no = r.req_no AND r.frm = b.req_frm)
INTO TEMP xxx WITH NO LOG;