2017-10-10 34 views
-1

我有2個表:包含在MySQL而不LIKE

  • 表1 - 纈氨酸1(例如:TOP
  • 表2 - 纈氨酸2(例如:TOP,TOP_12,TOP_14 [注:這是一個字符串])

Java有Contains方法來檢查的Val 1值在Val 2,我想知道如何編寫一個查詢就知道Val 1Val 2與否。我不想用LIKE因爲Val 2(字符串)包含TOP所有的值,以便與LIKE查詢計數爲3

+0

你想知道如果val 1它在VAL2或者你想知道多少倍? – nacho

+0

請更新您的問題,並顯示樣本數據以及您期望的表格輸出。 Java和SQL是非常不同的工具。 –

+0

@divyaDivi試試我的解決方案 – Neodan

回答

0

您可以有幾種方法解決這個問題。

DEMO數據庫架構和數據:

CREATE TABLE `t1` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    `val1` varchar(128) NOT NULL 
); 
INSERT INTO `t1` (`val1`) VALUES('TOP_1'),('TOP_12'),('TOP_13'); 

CREATE TABLE `t2` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    `val2` varchar(128) NOT NULL 
); 
INSERT INTO `t2` (`val2`) VALUES('TOP_1,TOP_3'),('TOP_4,TOP_12'); 

FIND_IN_SET演示:

SELECT t1.*, IF(t2.id IS NOT NULL, 1, 0) AS in_val2 
FROM t1 
LEFT JOIN t2 ON FIND_IN_SET(t1.val1, t2.val2) 

DEMO (in SQL Fiddle)

INSTR演示:

SELECT t1.*, IF(t2.id IS NOT NULL, 1, 0) AS in_val2 
FROM t1 
LEFT JOIN t2 ON INSTR(CONCAT('|', REPLACE(t2.val2, ',', '|'), '|'), CONCAT('|', t1.val1, '|')) 

INSTR DEMO (in SQL Fiddle)

+0

Hello Neodan,FIND_IN_SET可以在「MySQL Version:5.6」中使用,但是使用「Oracle SQL Developer-3.1.05」很抱歉,我忘記在我之前的評論中提到它 –

+0

@divyaDivi不幸的是,我沒有可能嘗試在'Oracle SQL Developer'上編寫一個SQL。我用'INSTR'添加了一個解決方案給我的答案(Oracle也有'INSTR')。也許這對你有幫助。 – Neodan

+0

@divyaDivi怎麼樣?你解決了這個問題嗎? – Neodan

0

您也可以使用LOCATE(substr,str)

更多參考請參閱this

+1

在這種情況下使用'LOCATE'是一個糟糕的主意,因爲例如'TOP_1'會出現在'TOP_12'( - ; – Neodan

+0

@NeoDan,哎呀,你說得對。 – Vivek