質問

私は、次の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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top