2016-08-17 22 views
0

在db數據庫中我有兩個表xxx1有58行和xxx2有71行。從不在另一個表中的行選擇字符串長度

兩個表都在XXX1XXX2我可以具有例如,由於在列name類似:

越南1/35溪山槍位BUNKER(

XXX2

越南1/35溪山槍位BUNKER(我)RESIN MODEL KIT

XXX1

如果嘗試XXX1表該查詢的結果是正確的:

mysql> SELECT 
    * 
FROM 
    `xxx1` r 
WHERE 
    r.name LIKE '%VIETNAM 1/35 KHE SANH ARTILLERY FIREBASE R%'; 
+----+----------------------------------------------------------+ 
| id | name              | 
+----+----------------------------------------------------------+ 
| 30 | VIETNAM 1/35 KHE SANH ARTILLERY FIREBASE RESIN MODEL KIT | 
+----+----------------------------------------------------------+ 
1 row in set 

現在我需要從表中沒有的另一種選擇行和我已經試過這查詢但輸出爲空:

mysql> SELECT 
    l.* 
FROM 
    xxx2 l 
WHERE 
    NOT EXISTS (
     SELECT 
      NULL 
     FROM 
      xxx1 r 
     WHERE 
      r.name LIKE '%VIETNAM 1/35 KHE SANH ARTILLERY FIREBASE R%' 
    ); 
Empty set 

問題是什麼?

如何解決這個問題?

你能幫助我嗎?

預先感謝您。

+0

方式我會處理這個問題,就是將兩個表格'LEFT JOIN'連接起來,然後確定不匹配的記錄。但是,您的連接條件要麼不明確,要麼很複雜,不容易實現。 –

回答

1

由於r.name LIKE '%VIETNAM 1/35 KHE SANH ARTILLERY FIREBASE R%'將返回基於問題的排,not exists條款將在XXX2所有記錄虛假的,因此會產生空結果。

如果你想知道哪條記錄在XXX2沒有相應的記錄在XXX1,其中XXX2內容是XXX1內容的開始,然後使用左與is null條件加入:

select xxx2.name 
from xxx2 
left join xxx1 on xxx2.name=left(xxx1.name,char_length(xxx2.name)) 
where xxx1.name is null 
0

試試這個

 SELECT 
    l.* 
FROM 
    xxx2 l 
WHERE 
    NOT EXISTS (
     SELECT 
      r.name 
     FROM 
      xxx1 r 
     WHERE 
      r.name LIKE concat('%',l.name,'%') 
    ); 
0
SELECT l.* 
FROM xxx2 l 
UNION 
SELECT r.* 
FROM xxx1 r where r.name LIKE '%VIETNAM 1/35 KHE SANH ARTILLERY FIREBASE R%' 
+0

請在您的回答中提供您的查詢的解釋,以便人們瞭解是否/爲什麼/如何運作。 – Marki555

+0

實際上,UNION將返回2個表中的所有行而不會有重複的行,這就是爲什麼我在這裏使用了UNION。如果我們想要重複行,那麼我們可以使用UNION ALL。 – Mahamadali

相關問題