2014-10-17 31 views
0

父表:SQL查詢的基礎在另一個表

 
Cate_Name | Warn_Qty 
-------------------- 
CAT1  | 40 
Test  | 10 
Test1  | 5 
Test1  | 10 

事務表

 
CAT1 | 25 
Test | 5 
Test2 | 50 
Test1 | 50 

在這裏,我正在尋找一個查詢。

在父表中,Cate_NameWarn_Qty值將由用戶定義。
Cate_Name會是n .. no。和它下面是交易表

查詢應只輸出比的相應Parent tableWarm_Qty

輸出這裏例如小於或等於數量從Transaction table記錄表看起來像

Parent Table 
    CAT1 | 40 
    Test | 10 

    Transaction table 
    CAT1 | 25 
    Test | 5 

注意: - 在查詢中,Cate_Name將是多個不能修復類別

+0

這裏我嘗試使用子查詢,但每次都沒有得到適當的輸出CATEG得到改變 – user3172930 2014-10-17 14:00:01

回答

1
SELECT t.category_name, t.warn_qty 
FROM 
    parent_table p, transaction_table t 
WHERE 
    p.category_name = t.category_name -- the join 
    t.warn_qty <= p.warn_qty   -- the qualifier 

除非我在這裏錯過了一些東西。它本質上是說「從交易表中提取所有warn_qty小於父表中匹配的warn_qty的所有內容,並按類別名稱加入。」

需要注意的是,對於SQL2008及更高版本,建議您完全寫出您的JOIN,而不是像上面所做的那樣進行快捷操作。儘管我還是老派,並且仍然認爲這對簡單的連接更具可讀性。

+0

隱加入約自1992年以來一直出風格也許是時候開始使用適當的明確的ANSI標準的SQL連接。關於爲什麼你可能想停止使用pre 92語法的一些推理,請參閱[踢壞的習慣:使用舊式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-習慣性地使用舊樣式joins.aspx) – jpw 2014-10-17 14:18:02

+0

我可以欣賞你的主觀意見(即使你的1992年的評論是荒謬的)。 T-SQL不推薦使用隱式*外*聯接(因爲SQL2005),但內聯仍然可以接受。 FWIW,代碼模式取決於開發人員。對我或你有用的東西並不總是相同的。性能方面,在MSSQL中 - 沒有什麼區別。如果你必須加入很多表格,我會給你一些更容易閱讀的表達方式 - 但如果你加入了三張表格,那就不一樣了。 – Jason 2014-10-17 14:22:02

+0

您的查詢是有效的,但一件事。這裏我面臨不同的問題,在孩子中我沒有價值的int值是像Cate1 25然後在數量部分CAT1 25次出現。所以在這裏我嘗試使用計數函數,但獲取聚合函數錯誤 – user3172930 2014-10-17 14:22:55

1

嘗試使用多個條件的內部連接。

select trans.category, trans.qty 
from transactiontable trans 
inner join parenttable parent on 
trans.Category = parent.Category 
and trans.qty <= parent.warn_Qty