嗨我在表A中的字段k中有其他表的主键列表,如下所示:
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,fun
现在我想从表B中选择主键与表A中的值匹配的所有记录 ,
select * from B where A.k
..有效 但是通过一个选择获得一条记录
我要求选择表B中与表A中的A.k匹配的所有记录。
提前谢谢你。
答案 0 :(得分:0)
MySQL不会将A.k
的值视为重新计算的表达式 - 它不会被替换为SQL并以递归方式执行。当您编写WHERE A.k
时,它只会测试k
列的内容是真还是假。
您不应将所有值都放在一列中。您应该在表A中为id
,ref
和fun
添加单独的列。然后您可以加入表格:
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;
上的MySQL文档