MySQL - 我可以加入一个值列表吗?

时间:2016-12-12 19:34:48

标签: mysql sql database

我试图找到db中表的正确连接结果以及我在其他地方获得的值列表。这就是我到目前为止所拥有的

SELECT * 
FROM new_assets n 
RIGHT JOIN ( VALUES ('0253608','test_name1')
                  , ('2311194', 'test_name2') AS v(id, name)) ON v.name=n.name;

我不断收到(VALUES ('0253608','test_name1'), ('2311194', 'test_name2')周围语法错误的错误消息。我究竟做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:2)

MySQL不支持VALUES()子句中的FROM。只需使用SELECTUNION ALL即可。另外,我会将其写为LEFT JOIN

SELECT *
FROM (SELECT '0253608' as id, 'test_name1' as name UNION ALL
      SELECT '2311194', 'test_name2'
     ) v LEFT JOIN
     new_assets n;

对于大多数人来说,更容易关注LEFT JOIN。它表示将所有行保留在 first 表中,然后匹配后续表中的行;当你将它们链接在一起时,这就有效这通常更容易遵循链接并说最后一个表包含所有行。

答案 1 :(得分:0)

为什么你不这样写呢?

SELECT n.*
  , CASE `name` 
    WHEN 'test_name1' THEN '0253608' 
    WHEN 'test_name2' THEN '2311194' 
  END AS id
FROM new_assets AS n
WHERE n.`name` IN ('test_name1', 'test_name2')
;

如果将WHERE ...替换为HAVING id IS NOT NULL,则可以删除重复的字符串文字;虽然它可能表现不佳。