我的数据库中有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来完成 谁能举个例子?
答案 0 :(得分:1)
您需要在关闭的位置限定列。如果TitleLine列位于equitymarketnews表中且StoryMain位于corporatenews中,则查询应该是
select * from equitymarketnews,economicnews,corporatenews,industrynews where equitymarketnews.TitleLine Like'%axis Bank%'OR corporatenews.StoryMain like'%axis Bank%';
你在这里遇到的另一个问题是你没有在表之间加入。阅读内部联接http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html
答案 1 :(得分:1)
您可能不希望像这样设计您的表,但是当您拥有相同的命名列并且可以引用任一表时,您需要执行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%';
here是联盟的良好开端
答案 2 :(得分:0)
如果存在相同的列名,请使用表别名。
假设你想从industrynews查看
然后使用industrynews.TitleLine Like '%axis Bank%'
如果您想要检查所有表格,请对每张表格使用相同的表格,并按照您的期望使用 使用AND,OR运算符。
答案 3 :(得分:0)
通过表名
为列名添加前缀e.g。 tablename.column
所以您的查询变为
select * from equitymarketnews,economynews,corporatenews,industrynews where TABLE_NAME.TitleLine Like '%axis Bank%' OR TABLE_NAME.StoryMain like '%axis Bank%';
将TABLE_NAME替换为包含优化查询的列的表名
答案 4 :(得分:0)
这意味着您在查询中引用的2个或更多表中具有相同的列名。您需要完全限定列名