0
我是新來的sql,有沒有一種更好的方式或更有效的方式來編寫我寫的以下查詢。我試圖通過recipe id來拉取所有配方類別,如果它們是聯結表中recipe id的記錄,它應該返回true,否則返回false。有沒有更有效的寫這個存儲過程的方法?
這裏是預期的輸出一個配方ID的截圖,你看怎麼有些人IsTagged真,其他都是假的
SELECT Name AS TagName, Id AS TagID, 'false' AS IsTagged
FROM dbo.Category
EXCEPT
SELECT category.Name AS TagName, category.ID AS TagID, 'false' AS IsTagged
FROM dbo.Category AS category
LEFT OUTER JOIN dbo.RecipeCategoryJunction AS junction
ON junction.CategoryID = category.Id
LEFT OUTER JOIN dbo.Recipes AS recipe
ON recipe.Id = junction.RecipeId
WHERE recipe.Id = 1019
UNION
SELECT category.Name AS TagName, category.ID AS TagID, 'true' AS IsTagged
FROM dbo.Category AS category
LEFT OUTER JOIN dbo.RecipeCategoryJunction AS junction
ON junction.CategoryID = category.Id
LEFT OUTER JOIN dbo.Recipes AS recipe
ON recipe.Id = junction.RecipeId
WHERE recipe.Id = 1019
你爲什麼在字符串文字和列別名中使用單引號?你不覺得困惑,難以閱讀嗎? – 2014-10-04 19:53:09
我不覺得難以閱讀 – Madhatter5501 2014-10-04 20:00:50
太棒了。你的讀者呢?那些必須繼承你的代碼的可憐人呢?我發現很難閱讀和反向工程,而且我真的懷疑我是一個人。根本不需要這些列別名的分隔符。另外,像a,b和c這樣的表別名如果與表格沒有關係,就很愚蠢。 'Category' ='a'和'Recipes' ='c'?真? – 2014-10-04 20:03:44