我想限制下面的SQL語句。限制SQL JOIN
SELECT expense.*, transaction.* FROM expense
INNER JOIN transaction ON expense_id = transaction_expense_id
我想要做的是限制'父'行的數量。 IE瀏覽器。如果我做了限制1,我只會收到一個支出項目,但仍然可以獲得與其相關的所有交易。
這將如何實現?
在這個階段,如果我做了LIMIT 1,我會得到一筆開支,而且只有一筆交易。
我想限制下面的SQL語句。限制SQL JOIN
SELECT expense.*, transaction.* FROM expense
INNER JOIN transaction ON expense_id = transaction_expense_id
我想要做的是限制'父'行的數量。 IE瀏覽器。如果我做了限制1,我只會收到一個支出項目,但仍然可以獲得與其相關的所有交易。
這將如何實現?
在這個階段,如果我做了LIMIT 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服務器不是一個選項,我可能最終會做兩個查詢。
expenses = SELECT * FROM expense ... LIMIT x
foreach expenses as expense
expense.transactions = SELECT * FROM transacion WHERE transaction_expense_id = expense.expense_id
我可能是愚蠢的,但是你不需要在某處加入用戶表嗎?作爲@rixth指出的 – Ben 2009-01-30 09:42:13
,您需要限定您所參與的所有表的連接... – 2009-01-30 09:43:59
哎呀,忘記了用戶表在那裏!我的錯字,任務已經修復。 – 2009-01-30 09:45:00