次の SQL ステートメントを制限しようとしています。
SELECT expense.*, transaction.* FROM expense
INNER JOIN transaction ON expense_id = transaction_expense_id
私がやりたいのは、「親」行の数を制限することです。つまり、LIMIT 1 を実行すると、経費項目は 1 つだけ受け取りますが、それに関連付けられたすべての取引は取得されます。
これはどのように実現できるでしょうか?私はMySQL 5.0を使用しています
この段階で、LIMIT 1 を実行すると、費用は 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;
ベン