首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL -从多个表中选择并显示多个字段

MySQL -从多个表中选择并显示多个字段
EN

Stack Overflow用户
提问于 2021-10-08 11:50:52
回答 1查看 2.7K关注 0票数 0

我有一个WordPress多站点,它有100个*_options表,即WPM_101_optionsWPM_201_options

我正在尝试查询选项名admin_emailsiteurlblogname

此代码将在一个表上工作:

代码语言:javascript
复制
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'

但是如何让它处理多个表呢?我试了两张桌子.

代码语言:javascript
复制
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'

代码语言:javascript
复制
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

代码语言:javascript
复制
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秒

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-08 12:26:08

错误说,您已经尝试查询两个表,每个表都有一个option_name列,而DB无法知道这两个表中的哪个表。

通过在FROM子句中指定两个表所做的工作是一个隐式连接。如果您希望将两个表中的列连接到结果中,则需要以表名作为前缀来指定所指的列。

代码语言:javascript
复制
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子句中使用两个表的隐式联接来实现的,而是通过使用UNIONUNION ALL来实现的,就像您已经使用过的那样。例如。

代码语言:javascript
复制
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指定不同的条件,也可以大大缩短这一时间。

代码语言:javascript
复制
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'

甚至是

代码语言:javascript
复制
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')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69495391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档