我试图找到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')
周围语法错误的错误消息。我究竟做错了什么?
谢谢!
答案 0 :(得分:2)
MySQL不支持VALUES()
子句中的FROM
。只需使用SELECT
和UNION 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
,则可以删除重复的字符串文字;虽然它可能表现不佳。