Может ли кто-нибудь помочь мне с SQL-запросом? Приношу свои извинения, если подобный вопрос уже задавался ранее. Находить это трудно из других примеров, которые я видел.
У меня есть 2 таблицы и я хотел бы создать третью таблицу.
Таблица - рекомендации
advID | productName
1 | 3.4/3.5/3.6
2 | 3.4
3 | 3.5/3.6
Таблица - клиентA
hostname | version
A | 3.3
B | 3.5
C | 3.6
Финальный стол
hostname | advID
A | NULL
B | 1
B | 3
C | 1
C | 3
Это выглядит правильно?
select advId, productNames, hostname, version
from advisories, customerA
where productNames
like '%3.6%';
Спасибо за помощь.
не могли бы вы привести пример?
Предоставьте MRE, как описано в вики-информации для второго тега, который вы использовали. stackoverflow.com/tags/sqlite/info
Это неподходящая модель данных. Не храните несколько значений в одной строке, если вас интересуют отдельные значения. Что касается вашего запроса: соединения, разделенные запятыми (from advisories, customerA
), являются пережитком 1980-х годов. Вместо этого используйте явные соединения. Вам понадобится внешнее соединение (покажите клиентов и их рекомендации, если они есть), что-то вроде from customerA c left join advisories a on a.productname like '%' || c.version || '%'
. Но это имеет проблемы. Например, like '%3.6%'
соответствует 3.65
и 13.6
. Исправьте модель данных. Только после этого пишите запрос.
@ThorstenKettner Пожалуйста, подумайте над тем, чтобы ответить. (Или, может быть, позвольте «свежим и амбициозным» участникам превратить ваш комментарий в ответ.)
@Yunnosch: Продолжайте :-) В данный момент у меня нет времени, чтобы написать ответ. Если вы (или кто-либо в этом отношении) хотите сделать это, сделайте это, пожалуйста.
Спасибо. Однако не обязательно обо мне, я думал о других (и, возможно, о себе....).
Спасибо всем за указатели. Я создал скрипт SQL, если это поможет ответить. sqlfiddle.com/#!9/ae36bae/11
Я бы предложил использовать LIKE
в JOIN
следующим образом:
SELECT C.HOSTNAME,
A.advisoryId
FROM customerA C LEFT JOIN advisories A
ON CONCAT('/',A.productNames,'/') LIKE concat('%/',C.version,'/%')
order by C.HOSTNAME
См. Скрипт SQL. Я изменил функцию ||
на CONCAT
.
Большое спасибо .. не могли бы вы использовать скрипку SQL, чтобы ответить? sqlfiddle.com/#!9/ae36bae/11
Проверьте ответ сейчас, с SQL Fiddle
Никогда не используйте запятые в FROM, если вы хотите перекрестное соединение, используйте
cross join