Intereting Posts
Представления SQL / Database в Grails Период тайм-аута не истек, но все-таки тайм-аут (см. Код)? Используя dapper, почему создается временная таблица, созданная при одном использовании соединения, недоступного при повторном использовании одного и того же соединения Самый эффективный код для установки столбца порядка сортировки / назначение последовательной серии чисел столбцу? Как присоединиться к COUNT из таблицы, а затем применить этот COUNT к другому JOIN Почему функция 'insert' не добавляет строки, используя MySQLdb? Выбор значений, сгруппированных по определенному идентификатору SQL-выбор строк, где значение одного столбца является общим для другого столбца критериев SQL присоединяет подзапросы SQL (производительность)? Как группировать по неделям, указав день окончания недели? INSERT с ORDER на Oracle Получить количество строк в таблице с помощью SQLAlchemy Сортировка результатов с помощью sdk Cursor's managedQuery в нечувствительном к регистру образом Что такое разбиение таблиц? Как форматировать предложение SQL IN с помощью Python

Присоединиться к подзапросу

Я хочу выполнить простое соединение на двух таблицах после подключения двух столбцов с идентификаторами в одной из этих таблиц.

Первый шаг:

SELECT cars.hhid & cars.vmid FROM cars 

Теперь я хочу сравнить этот результат с другой таблицей (table2).

Новый результат должен быть в каждой строке таблицы1 (автомобили), соответствующей ID в таблице2.

Что не так?

Мой код:

 SELECT Cars.* FROM (SELECT Cars.hhid & Cars.vmid AS zid FROM cars) x JOIN table2 ON table2.id = x.zid; 

Из того, что вы сказали в вопросе, я не понимаю, зачем вам нужен подзапрос.

Попробуй это:

 select cars.* from cars inner join table2 on cstr(table2.id) = cars.hhid & cars.vmid 

(тестируется с double типом данных для всех трех полей)

Вам не нужен подзапрос, потому что вы можете поместить свои «связанные столбцы» непосредственно в предложение JOIN (конечно, вы также можете поместить их в предложение SELECT , если они вам понадобятся).

Однако, как только вы объединяете столбцы, Access, похоже, обрабатывает их как string , поэтому вы не можете присоединиться к ним непосредственно в double столбце в table2 .
Вот почему вам нужно преобразовать столбец из таблицы2 в строку с CStr() .

* Ответ для TSQL, до изучения было MS-Access *

SQL не имеет double типа данных, поэтому вам нужно будет использовать float.

Чтобы использовать оператор конкатенации + значения должны быть преобразованы в строку с использованием CAST или CONVERT

Данные:

 declare @cars table (hhid float, vmid float) declare @table2 table (id float) insert @cars values (1,1),(2,2) insert @table2 values (11),(22),(12),(21) 

Запрос:

 SELECT x.* FROM ( SELECT CAST(c.hhid AS nvarchar(20)) + CAST(c.vmid AS nvarchar(20)) AS zid FROM @cars c ) x INNER JOIN @table2 t ON t.id = x.zid 

* Попытка MS-Access *

Это работает лучше, для меня это похоже на то, что ваши ссылки на таблицы слегка отжимаются

 SELECT x.* FROM (SELECT c.hhid & c.vmid AS zid FROM cars c) x JOIN table2 t ON t.id = x.zid; 

Пытаться

 SELECT x.* FROM (SELECT Cars.hhid & Cars.vmid AS zid FROM cars) x INNER JOIN table2 ON table2.id = x.zid; 

MS Access, например, тип соединения.