2016-09-29 67 views
0

您好,我有我的域K其他表的主鍵的表A像這樣的列表:選擇多鍵列表記錄

id=1 and ref=2 and fun=1 
    id=1 and ref=5 and fun=2 
    id=2 and ref=1 and fun=1 

,我有一個表B中,它的主鍵是ID, REF,有趣

現在我要選擇表B中的所有記錄,其中主鍵表中的值相匹配的 ,當然 的

select * from B where A.k 

.. WOR KS 但得到一個記錄由一個選擇

我要求選擇從表A

匹配A.K表B中的所有記錄預先感謝您。

+0

MySQL的MySQL文檔不會解釋字符串列,以計算表達式。 – Barmar

+0

當A.kk的內容是一個像'id = 1和ref = 2和fun = 1'這樣的字符串時,你可以從B中選擇一些東西,其中ak的值是上面的字符串 –

回答

0

MySQL不會將A.k的值作爲重新評估的表達式 - 它不會被替換到SQL中並遞歸執行。當您編寫WHERE A.k時,它只是測試k列的內容是true還是false。

你不應該把所有的值放在一個列中。你應該有單獨列idref,並fun表A,然後就可以加入表:

SELECT B.* 
FROM B 
JOIN A ON B.id = A.id AND B.ref = A.ref AND B.fun = A.fun 

如果你真的想在表列中SQL表達式,你需要創建動態存儲過程中的SQL。

SET @where = (SELECT GROUP_CONCAT(CONCAT('(', k, ')') SEPARATOR ' OR ') 
       FROM A); 
PREPARE stmt FROM CONCAT('SELECT * FROM B WHERE ', @where); 
EXECUTE stmt; 

查看Prepared Statements

+0

我認爲之前和之後它的男人,謝謝 –