質問
私は、次のSQL文を制限しようとしています。
SELECT expense.*, transaction.* FROM expense
INNER JOIN transaction ON expense_id = transaction_expense_id
私が何をしたいのか、「親」の行の数を制限しています。 IE。私はLIMIT 1をすれば、私は唯一の経費項目を受け取ったが、それでもそれに関連付けられたすべてのトランザクションを得るでしょう。
これはどのように達成されるのでしょうか?
私はLIMIT 1を行う場合は、この段階で、私は1つの費用、および1つのトランザクションのみを取得します。
解決
だから我々は、ユーザーテーブルを除外することができますと仮定し、それは以下のように書き換えることができます:
select * from expense, transaction where expense_id = transaction_expense_id
あなたが制限を適用する場合さて、あなたはこのようにそれを行うことができます:
select * from expense, transaction where expense_id = transaction_expense_id and
expense_id in (select expense_id from expense limit 1)
それはあなたが望んでいた何だろうか?もちろん、あなたのexpense_idsがで戻ってくるしようとしているので、あなたはおそらく何でも、ORDER BYを使用したい順序かについて慎重にする必要があります。
編集:以下のコメントで説明したMySQLの制限を考えると、多分これは動作します:
select * from (select id from expense order by WHATEVER limit 1) as t1, transaction where expense_id=transaction_expense_id;
ベン
他のヒント
は、を犠牲にあなたが取得したいの項目をするかを指定する必要があります。最も高価な?最新の?
:その後、それだけで返すサブクエリに対して参加SELECT
expense.*, transaction.*, user.*
FROM
(SELECT * FROM expense WHERE ...) AS expense
INNER JOIN
transaction ON expense_id = transaction_expense_id
SQLサーバをアップグレードするオプションがないので、私は2つのクエリをやって終わる可能性があります。
expenses = SELECT * FROM expense ... LIMIT x
foreach expenses as expense
expense.transactions = SELECT * FROM transacion WHERE transaction_expense_id = expense.expense_id
所属していません StackOverflow