选择具有多键列表的记录

时间:2016-09-29 00:04:49

标签: mysql

嗨我在表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匹配的所有记录。

提前谢谢你。

1 个答案:

答案 0 :(得分:0)

MySQL不会将A.k的值视为重新计算的表达式 - 它不会被替换为SQL并以递归方式执行。当您编写WHERE A.k时,它只会测试k列的内容是真还是假。

您不应将所有值都放在一列中。您应该在表A中为idreffun添加单独的列。然后您可以加入表格:

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

上的MySQL文档