我的数据库中有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替换为包含优化查询的列的表名
这只是意味着在查询中引用的两个或多个表中具有相同的列名。您需要完全限定列名