簡體   English   中英

來自另一個表和通配符的SQL Like值

[英]SQL Like value from another table and wildcharcters

我有兩個表,用於表測試的NDC_10的值是10位代碼,而表產品中PRODUCTNDC的值是8位代碼。 我正在嘗試選擇8位代碼在10位代碼內的所有行,例如:0123456789 = 10位12345678 = 8位

我從邏輯上想出了類似的方法,但是我不知道如何將2個通配符嵌套在另一個表的搜索中

select NDC_10
FROM test, product
WHERE (NDC_10 LIKE '_product.PRODUCTNDC_')
select t.NDC_10, p.NDC_8
FROM test t
INNER JOIN product p ON (LOCATE(p.NDC_8,t.NDC_10) <> 0)

參見: http : //dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_locate
並且: http : //www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

而且從不使用隱式連接語法,它是一種反模式。
原因是進行交叉聯接太容易了,在所有情況下,這種交叉聯接都不是您想要的,這占99.99%。

LIKE搜索的通配符為% 因此,如果我想獲取包含您的8位代碼的所有記錄,則可以這樣做:

SELECT NDC_10
FROM test, product
WHERE NDC_10 LIKE '%12345678%'

如果我只希望那些與8位代碼開始 ,那么這將工作:

SELECT NDC_10
FROM test, product
WHERE NDC_10 LIKE '12345678%'

如果我只希望記錄以相同的8位數字結尾

SELECT NDC_10
FROM test, product
WHERE NDC_10 LIKE '%12345678'

希望這能回答你的問題。

如果您嘗試通過聯接進行操作,請嘗試以下操作:

SELECT test.NDC_10
FROM test
    INNER JOIN product ON test.NDC_10 LIKE '%' + product.PRODUCTNDC + '%'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM