2012-03-01 18 views
0

の名前を変更使用すると、登録しようとsub.blockid=idです。私は、サブクエリ内idとしてblockidに改名しましたが、USINGキーワードはまだサブスクライブテーブルから名前を変更id列(BLOCKID)の代わりに列idを取り付けています。MySQLの私は何をしようとしている列

$subscribequery = "JOIN (SELECT id as subid, blockid as id from subscribe WHERE userid='1') AS sub 
    USING (id)"; 

これはONと簡単だろうが、私は使用してサブクエリを他のJOINをしています。他のサブクエリと一緒にUSINGの代わりにONを使用しようとすると、列があいまいなエラーになります。

あなたは同じクエリでUSINGONの両方を使用することはできますか?上記のように列の名前を変更できますか?

完全なクエリです。原因は2番目のJOINクエリです。

SELECT * FROM products 
JOIN (SELECT nid, sid, name AS max_name from products WHERE guideline='1' group by nid, sid) AS at1 
     USING (nid, sid) 
JOIN (SELECT id as subid, blockid as id from subscribe WHERE userid='1') AS sub 
     USING (id) 
WHERE id = subid AND name = max_name AND pending='0' AND deleted='0' 
ORDER BY subid DESC, nid DESC; 

答えて

1

明確にするために、実際には列の名前を変更せずに、エイリアシングを適用するだけです。はい、サブクエリを使用しているので、外部クエリでONまたはUSING節の列エイリアスを使用できます。

USINGの代わりにONを使用し、各列が参照する表またはサブクエリを単に指定することをお勧めします。表名または表の別名を使用します。

ONを使用して、あなたが参照しているテーブルに関する明示的なものにも、特に複数の結合を使用していることを考慮すると、コードが読みやすくなります。

JOIN (SELECT nid, sid, name AS max_name from products WHERE guideline='1' group by nid, sid) AS at1 
     ON at1.nid = products.nid and at1.sid = products.sid 
JOIN (SELECT id as subid, blockid as id from subscribe WHERE userid='1') AS sub 
     ON sub.id = products.id 

はここにあなたのクエリを使用した例です

関連する問題