2012-02-10 4 views
1

私は同じテーブル構造を持つ私のデータベースで5つのテーブル選択mysqlの

は、エラーが

Column 'TitleLine' in where clause is ambiguous 
あるERRO を取得していますのようなキーワード ですべてのテーブルを選択しようとしている必要があり

クエリ実行中は

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

誰でもどこで間違っているのか教えていただけますか?

これはUNION BY によって行うことができます誰も私に例を与えることができますか?

答えて

1

同じ名前の列を持ち、いずれかのテーブルを参照すると、mysqlを理解するためにtableName.columnNameを実行する必要があります。労働組合のために、ちょうど

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は組合

の良いスタートですので(すべて1つの文)のように一緒に、独自の選択後、組合それらにそれらのそれぞれを破ります
0

同じ列名が存在する場合は、テーブル別名を使用します。あなたは、すべてのテーブルからチェック表ごとに、あなたの期待 使用AND、OR演算子と同じように使用したい場合は、industrynews.TitleLine Like '%axis Bank%'

を使用する産業ニュース からチェックしたいとし 。

0

テーブル名の前にカラム名を接頭辞として付けます。

tablename.column

ので、あなたのクエリが

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

は、クエリ

0

を最適化列はちょうどあなたが2つの以上のテーブルに同じ列名を持つことを意味することを保持するテーブル名とTABLE_NAMEを置き換えるとなりあなたのクエリで参照されます。列名を完全修飾する必要があります。

1

どこの列で列を修飾する必要があります。あなたのクエリがequitymarketnews、economynews、corporatenews、産業ニュースequitymarketnews.TitleLine同様に「%軸銀行%」OR corporatenews.StoryMainから

選択*必要以上、TitleLine列がequitymarketnewsテーブルにあるとStoryMainはcorporatenewsである場合'%axis Bank%'のように。

ここで問題になっているのは、テーブル間の結合ではないということです。内部結合で読み込むhttp://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html