有2-4個表,它們都有 "Product_Code "列。
我想檢查其中哪一個表有我要找的 "Product_Code"。
代碼大多只在一個表中。但在特殊情況下,它可以同時出現在兩個表中。我不關心它給我哪一個。我只需要一個有代碼的表。
我可以通過多個 SELECT 查詢來實作這一目標,但我想知道是否有一個更簡單的方法來實作。
搜索了一下,但不能得到更多的連接狀態。
謝謝你的幫助。
預先感謝!
uj5u.com熱心網友回復:
你可以使用這樣的查詢:
Select 'Table1TableName' as TableName, ProductCode from Table1 where ProductCode = @ProductCode
聯盟 聯盟
選擇 'Table2TableName' 作為 TableName。ProductCode from Table2 where ProductCode = @ProductCode
Union Union
選擇 'Table3TableName' 作為 TableName。ProductCode from Table3 where ProductCode = @ProductCode
聯盟 聯盟
選擇 'Table4TableName' 作為 TableName, ProductCode from Table4 where ProductCode = @ProductCode
這將為每一個命題提供一行 命題來源的標簽名稱。
你也可以使用動態查詢,但我認為它不會比這個更有效率。
uj5u.com熱心網友回復:
每個設備都有5-8個筒倉。設備基本上是一個稱重器。每個稱重器都有它們可以稱量的特定成分,但一些經常使用的成分可能在多個稱重器中。試圖弄清楚哪個秤的倉里有這種原料,在配方中我說的是從那個秤里獲得這種原料。我并不 "了解 "筒倉,我所知道的是稱重器有成分。如果它的某個料倉里有該原料,它就知道并提取該原料。
讓我們假設有一個合適的資料模型:-) 那么查詢基本上會是這樣的:
select *
from recipe r
join recipe_ingredients ri on ri.recipe_id = r.recipe_id
join weigher_ingredient wi on wi.access_id = i.access_id。
但是這可能會讓你的原料成倍地出現在一個以上的稱重器中。我們必須為每種原料挑選一個稱重器。一種方法是橫向連接,在SQL Server中稱為CROSS APPLY。
select *
from recipe r
join recipe_ingredients ri on ri.recipe_id = r.recipe_id
joinlateral
(
select top (1) *
from weigher_ingredient
where weigher_ingredient. ingredient_id = i. ingredient_id
) wi;
在你的資料庫中沒有一個weigher_ingredient表,但是每個稱重器有一個配料表。讓我們把這些表稱為weigher1_ingredient, weigher2_ingredient, 和weigher3_ingredient。然后查詢就變成了:
select *
from recipe r
join recipe_ingredients ri on ri.recipe_id = r.recipe_id
joinlateral
(
select top (1) *
從
(
select * from from weigher1_ingredient
unionall
select * from from weigher2_ingredient
unionall
select * from from weigher3_ingredient
) 稱重師_配料
where weigher_ingredient. ingredient_id = i. ingredient_id
) wi;
正如在請求評論中提到的,你可以簡單地創建weigher_ingredient作為一個視圖。因此,你不必在每個查詢中聯合所有的表(也就是說,你將使用我的第二個查詢而不是這個第三個查詢)。
這取決于SQL Server的優化器,執行計劃變得多好。理想情況下,它將看到我們一次只尋找一個 ingredient_id,并且希望在這個 ID 上有索引,所以這個行將很快被獲取。優化器可能會進一步發現,一旦它在其中一個表中找到成分,它就可以停止搜索,因為TOP (1)。如果它還沒有,我們仍然可以希望未來的版本能夠做到:-)
。
uj5u.com熱心網友回復:
我認為你可以寫動態sql查詢。比如說
exec 'select * from '/span> @tableName ' where Product_Code=' @productCode '
并且你可以在回圈中使用它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/311075.html
標籤:
上一篇:在SQL服務器上使用案例時
下一篇:根據引數選擇是否提供的單一查詢
