我正在尝试在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')语法错误的错误。我做错了什么?
谢谢!
发布于 2016-12-13 03:36:32
MySQL在FROM子句中不支持VALUES()。只需使用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更容易。它说保留第一个表中的所有行,然后匹配后续表中的行;当您将它们链接在一起时,这是有效的。这通常比遵循链并说明最后一个表包含所有行更容易。
发布于 2016-12-13 03:41:41
你为什么不这样写呢?
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,则可以消除重复的字符串文字;尽管它的性能可能不会很好。
https://stackoverflow.com/questions/41108214
复制相似问题