2016-09-29 65 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

我认为之前和之后它的男人,谢谢 –