我有一个WordPress多站点,它有100个*_options表,即WPM_101_options到WPM_201_options。
我正在尝试查询选项名admin_email、siteurl和blogname。
此代码将在一个表上工作:
SELECT option_name, option_value
FROM wpm_104_options
WHERE option_name = 'admin_email'
UNION
SELECT option_name, option_value
FROM wpm_104_options
WHERE option_name = 'siteurl'
UNION
SELECT option_name, option_value
FROM wpm_104_options
WHERE option_name = 'blogname'但是如何让它处理多个表呢?我试了两张桌子.
SELECT option_name, option_value
FROM wpm_104_options,wpm_105_options
WHERE option_name = 'admin_email'
UNION
SELECT option_name, option_value
FROM wpm_104_options,wpm_105_options
WHERE option_name = 'siteurl'
UNION
SELECT option_name, option_value
FROM wpm_104_options,wpm_105_options
WHERE option_name = 'blogname'和
SELECT option_name, option_value
FROM wpm_104_options,wpm_101_options
WHERE option_name = 'admin_email'
GROUP BY option_name
UNION
SELECT option_name, option_value
FROM wpm_104_options,wpm_101_options
WHERE option_name = 'siteurl'
GROUP BY option_name
UNION
SELECT option_name, option_value
FROM wpm_104_options,wpm_101_options
WHERE option_name = 'blogname'
GROUP BY option_name和
SELECT wpm_104_options.option_name as n104, wpm_104_options.option_value as v104, wpm_101_options.option_name as n101, wpm_101_options.option_value as v101
FROM wpm_104_options, wpm_101_options
WHERE option_name = 'admin_email' ...but我得到了一个错误:
错误代码: 1052。字段列表中的列“option_name”是模糊的0.000秒
发布于 2021-10-08 12:26:08
错误说,您已经尝试查询两个表,每个表都有一个option_name列,而DB无法知道这两个表中的哪个表。
通过在FROM子句中指定两个表所做的工作是一个隐式连接。如果您希望将两个表中的列连接到结果中,则需要以表名作为前缀来指定所指的列。
SELECT wpm_104_options.option_name, wpm_104_options.option_value, wpm_101_options.option_name, wpm_101_options.option_value
FROM wpm_104_options,wpm_101_options
WHERE wpm_104_options.option_name = 'admin_email'
GROUP BY wpm_104_options.option_name但是,这通常只有在您还指定列应该以何种方式连接时才有意义,即在WHERE子句中定义它们的关系。否则,您只需从这两个表中得到所有可能的行组合。
我想你真正想要的是别的东西。我相信您只是想要您为一个表显示的查询的合并结果,但需要两个表的结果。这不是通过在FROM子句中使用两个表的隐式联接来实现的,而是通过使用UNION或UNION ALL来实现的,就像您已经使用过的那样。例如。
SELECT option_name, option_value
FROM wpm_104_options
WHERE option_name = 'admin_email'
UNION
SELECT option_name, option_value
FROM wpm_104_options
WHERE option_name = 'siteurl'
UNION
SELECT option_name, option_value
FROM wpm_104_options
WHERE option_name = 'blogname'
UNION
SELECT option_name, option_value
FROM wpm_101_options
WHERE option_name = 'admin_email'
UNION
SELECT option_name, option_value
FROM wpm_101_options
WHERE option_name = 'siteurl'
UNION
SELECT option_name, option_value
FROM wpm_101_options
WHERE option_name = 'blogname'只需在WHERE子句中使用OR指定不同的条件,也可以大大缩短这一时间。
SELECT option_name, option_value
FROM wpm_104_options
WHERE option_name = 'admin_email'
OR option_name = 'siteurl'
OR option_name = 'blogname'
UNION
SELECT option_name, option_value
FROM wpm_101_options
WHERE option_name = 'admin_email'
OR option_name = 'siteurl'
OR option_name = 'blogname'甚至是
SELECT option_name, option_value
FROM wpm_104_options
WHERE option_name IN ('admin_email', 'siteurl', 'blogname')
UNION
SELECT option_name, option_value
FROM wpm_101_options
WHERE option_name IN ('admin_email', 'siteurl', 'blogname')https://stackoverflow.com/questions/69495391
复制相似问题