Я выбираю 1 поле из 1 таблицы и сохраняю его во временную таблицу.
Иногда в этой таблице остается 0 строк.
Я хочу добавить это поле в другую таблицу с более чем 20 полями.
Обычное объединение у меня не сработает из-за несоответствия # поля. Внешний вид у меня не подойдет, потому что сравнивать не с чем. NVL не работает с первой временной таблицей.
Кто-нибудь знает, как это сделать?
ОБНОВЛЕНО:
Я не упомянул .... Когда таблица, которая извлекает одно поле, находит совпадение в других случаях, этот код, который я использую, теперь работает ....
SELECT DISTINCT reqhead_rec.resp_name<br>
FROM reqhead_rec, biglist<br>
WHERE reqhead_rec.req_no = biglist.req_no
AND reqhead_rec.frm = biglist.req_frm<br>
INTO TEMP grabname with no log;
SELECT biglist.*, grabname.resp_name<br>
FROM biglist, grabname<br>
ORDER BY prnt_item, account_amt<br>
INTO TEMP xxx with no log;
в первой таблице есть много информации о заказах на поставку, вторая таблица просто находит имя из другой таблицы, соответствующей ему в двух полях, иногда запросы на покупку создаются без соответствующей информации Могу ли я просто установить что-то по умолчанию в случае, если строки не найдены?


Похоже, вы действительно хотите присоединения, а не союза.
Вам не нужно ничего сравнивать, чтобы выполнить соединение. Вы получите перекрестный продукт, если не укажете условие соединения:
SELECT t20.*, t1.*
FROM table_with_20_columns AS t20
LEFT OUTER JOIN temp_table_with_1_column AS t1 ON (1=1);
Когда во временной таблице нет строк, в результате вышеуказанного запроса она будет сообщена как NULL.
Однако, если во временной таблице есть несколько строк, вы получите перекрестное произведение с первой таблицей. По твоему вопросу я не могу сказать, чего ты хочешь.
редактировать: Условие соединения, выраженное в предложении ON или USING, должно быть необязательным в соответствии со стандартом SQL, но, по крайней мере, пока я тестирую его в MySQL 5.0, опускать это предложение является синтаксической ошибкой. Но можно использовать ON (1=1).
редактировать: Отвечая на ваш вопрос в комментарии:
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;
Вам нужно предложение «ON», иначе вы получите сообщение об ошибке ... вы можете присоединиться к «ON 1 = 1».
Я предполагаю, что мне действительно следует спросить, как я могу заполнить поле значением по умолчанию, если запрос не дал результатов? исходный запрос .. ВЫБЕРИТЕ reqhead_rec.resp_name FROM reqhead_rec ГДЕ reqhead_rec.req_no = biglist.req_no И reqhead_rec.frm = biglist.req_frm INTO TEMP grabname БЕЗ ЖУРНАЛА;
Я получаю синтаксическую ошибку в открытой кавычке для имени по умолчанию ... я не использую mysql, и иногда синтаксис подпрограмм не работает в версии, которую я использую ... я буду продолжать пытаться это, хотя, спасибо .... я отредактировал исходный вопрос с использованием sql im сейчас
я получаю синтаксические ошибки с подпрограммой coalesce ... я использую informix, хотите верьте, хотите нет ... но большое спасибо за вашу помощь ... очень признателен
Вау, это довольно слабо. Coalesce - это стандартная функция SQL. Может быть, в Informix есть функция для выполнения аналогичных действий, например IFNULL () или NVL () или что-то в этом роде.
nvl существует, но не сработал по неизвестной причине .. поэтому я разместил этот вопрос
С каким полем он будет соответствовать? Кстати, вот как их выстроить:
SELECT NULL, NULL, NULL, NULL, MySingleField, NULL, NULL, NULL... FROM #temp
UNION ALL
SELECT Col1, Col2, Col3, Col4, Col5, Col6,... FROM OtherTable
ОБНОВИТЬ:
Хорошо, после прочтения вашего обновления ... Я не думаю, что вам вообще нужен UNION, а, скорее, невероятно простой SUBSELECT
SELECT
*,
(SELECT TOP 1 Name FROM Blah WHERE Blah.SomeID = MyTable.SomeID) AS ExtraCol
FROM
MyTable
мне нужно добавить поле в таблицу, первая таблица имеет 73 поля, ей нужно # 74, что является чьим-то именем из другой таблицы
спасибо .. подвыбор сработал !!! "2 строки извлечены". никогда не выглядел так хорошо ...
Попробуйте выбрать nvl(NULL,NULL) для отсутствующих значений
Каковы критерии выбора, добавлять ли поле из первой таблицы в строку во второй таблице?