Select From Multiple Tables mysql


Select From Multiple Tables mysql

我的数据库中有5个表具有相同的表结构

我正在尝试从所有带有like关键字的表中进行选择那我就错了错误是

Column 'TitleLine' in where clause is ambiguous

正在执行的查询是

select * from equitymarketnews,economynews,corporatenews,industrynews where TitleLine Like '%axis Bank%' OR StoryMain like '%axis Bank%';

有人能告诉我哪里做错了吗?

我知道这可以由UNION完成有人能给我举个例子吗?

您可能不想这样设计表,但当您有相同的命名列,并且它可能引用任何一个表时,您需要执行tableName.columnName以使mysql理解。对于一个联合,只需将它们中的每一个分解为自己的选择,然后像这样将它们联合在一起(全部为一个语句)

select * from equitymarketnews where TitleLine Like '%axis Bank%' OR StoryMain like '%axis Bank%' 
UNION select * from economynews where TitleLine Like '%axis Bank%' OR StoryMain like '%axis Bank%' 
UNION select * from corporatenews where TitleLine Like '%axis Bank%' OR StoryMain like '%axis Bank%' 
UNION select * from industrynews where TitleLine Like '%axis Bank%' OR StoryMain like '%axis Bank%';

这是联合的一个良好开端

您需要在where关闭中限定列。如果TitleLine列在equitymarketnews表中,StoryMain在corporatenews中,那么您的查询应该是

从equitymarketnews、economynews、corporationnews、industrynews中选择*。标题行类似于"%axis Bank%"或企业新闻。StoryMain类似于"%axis Bank%";

你在这里遇到的另一个问题是你没有在表之间连接。阅读内部联接http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

如果存在相同的列名,请使用表别名。假设您想查看行业新闻然后使用industrynews.TitleLine Like '%axis Bank%'

如果您想从所有表中进行检查,则对每个表使用相同的值,并按照您的期望使用AND、OR运算符。

用表名作为列名的前缀

例如tablename.column

所以您的查询变成

select * from equitymarketnews,economynews,corporatenews,industrynews where TABLE_NAME.TitleLine Like     '%axis Bank%' OR TABLE_NAME.StoryMain like '%axis Bank%';

将TABLE_NAME替换为包含优化查询的列的表名

这只是意味着在查询中引用的两个或多个表中具有相同的列名。您需要完全限定列名