2015-01-14 1 views
0

У меня есть 2 таблицы. Один называется DocumentStatistics, который называется Documents. DocumentStatistics имеет поле под названием filename, которое содержит имя файла, например abcdef. Документы с другой стороны имеют аналогичную схему именования, но поскольку она также содержит старые файлы, они нумеруются (например, они могут иметь abcdef1 и abcdef2). Только последний документ будет отмечен как islive = -1.SQL INNER JOIN with LIKE и WHERE

Я хотел бы отобразить данные из DocumentStatistics плюс правильную ячейку из таблицы Documents. Может кто-нибудь мне помочь? Это то, что у меня есть до сих пор:

SELECT DocumentStatistics.*,Documents.tmpname 
FROM DocumentStatistics 
INNER JOIN Documents 
ON DocumentStatistics.filename LIKE 'Documents.filename%' 
WHERE Documents.islive=-1 
+0

Предлагаю работать с первичными и внешними ключами. – pbaldauf

ответ

0

Возможно, вы можете сделать это с помощью SUBSTRING. Что-то вроде этого:

SELECT DocumentStatistics.*,Documents.tmpname 
FROM DocumentStatistics 
LEFT JOIN Documents 
ON SUBSTRING(DocumentStatistics.filename,start,length)= SUBSTRING(Documents.filename,start,length) 
WHERE Documents.islive=-1 
+0

Я очень новичок на этом сайте. Как принять ваш ответ? – Andrew

+0

Есть одна кнопка слева от моего ответа. Я не могу сказать :) – Minh

+0

Выполнено. Еще раз спасибо. – Andrew

1

like в порядке. Вам просто нужно правильно называть его:

SELECT ds.*, d.tmpname 
FROM DocumentStatistics ds INNER JOIN 
    Documents d 
    ON ds.filename LIKE CONCAT(d.filename, '%') 
WHERE d.islive = -1; 

Ваша версия звала его с постоянной строкой, а не имя столбца.

Я добавил в запрос псевдонимы таблицы. Они облегчают запись и чтение запроса.

+0

CONCAT - это то, с чем я раньше не сталкивался. Спасибо, что добавили что-то в свой набор инструментов. – Andrew