I am joining between 3 tables and getting the wrong result. The goal is to list ALL the restaurants in the restaurants table and display the rating for any restaurant if the rating exists, otherwise display null, and only for ratings for burger.

我加入了3个表格,得到了错误的结果。目标是列出餐厅表中的所有餐厅,并显示任何餐厅的评级(如果存在评级的话),否则显示空值,并且只显示汉堡的评级。

This is the SQL:

这是SQL:

    SELECT r.RestaurantID, RestaurantName, cr.Rating FROM Restaurant r
      LEFT JOIN CustRating cr ON cr.RestaurantID = r.RestaurantID
      LEFT JOIN FoodType ft ON ft.FoodTypeID = cr.FoodTypeID AND 
        ft.FoodTypeName = 'Burger'

This is the result:

这是由于:

However 'Cafe C' should have Rating = null because I only want to display ratings for Burgers. What's the proper SQL?

但是,“Cafe C”应该具有= null的评级,因为我只想显示汉堡的评级。适当的SQL是什么?

The SQL Statements to create the tables and populate with data:

创建表并使用数据填充的SQL语句:

CREATE TABLE [dbo].[Restaurant](
    [RestaurantID] [int]  NOT NULL,
    [RestaurantName] [varchar](250) NOT NULL

)

CREATE TABLE [dbo].[FoodType](
    [FoodTypeID] [int]  NOT NULL,
    [FoodTypeName] [varchar](50) NOT NULL

)
CREATE TABLE [dbo].[CustRating](
    [RestaurantID] [int] NOT NULL,
    [FoodTypeID] [int] NOT NULL,
    [Rating] [smallint] NOT NULL
 ) 

 BEGIN TRANSACTION;
INSERT INTO [dbo].[CustRating]([RestaurantID], [FoodTypeID], [Rating])
SELECT 2, 1, 3 UNION ALL
SELECT 3, 2, 2
COMMIT;
GO

BEGIN TRANSACTION;
INSERT INTO [dbo].[FoodType]([FoodTypeID], [FoodTypeName])
SELECT 1, N'Burger' UNION ALL
SELECT 2, N'Taco'
COMMIT;
GO

BEGIN TRANSACTION;
INSERT INTO [dbo].[Restaurant]([RestaurantID], [RestaurantName])
SELECT 1, N'Cafe A' UNION ALL
SELECT 2, N'Cafe B' UNION ALL
SELECT 3, N'Cafe C'
COMMIT;
GO

6 个解决方案

#1


3

SELECT              
                    Restaurant.*
                    ,CASE  WHEN FoodType.FoodTypeID IS NULL THEN NULL ELSE CustRating.Rating END AS Rating

 FROM               Restaurant Restaurant
 LEFT OUTER JOIN    CustRating CustRating 
 ON                 Restaurant.RestaurantID =   CustRating.RestaurantID
 LEFT OUTER JOIN    FoodType FoodType 
 ON                 FoodType.FoodTypeID = CustRating.FoodTypeID
 AND                FoodType.FoodTypeName = 'Burger'

更多相关文章

  1. 求一条sql语句:计算两列的差值,以及各个差值占差值总和的比例
  2. 条件复杂的sql语句查询
  3. SQL Server中存储过程比直接运行SQL语句慢的原因
  4. Mysql order by语句未使用索引的思考
  5. SQL语句练习(1)
  6. 存款日均额计算的SQL语句如何书写
  7. android应用如何在有需要时申请root权限?在程序中要调用哪些语句
  8. 错误:未使用的导入语句 - 导入android.widget.AdapterView.OnItem
  9. 我在Java中组织这些if语句时遇到了很多麻烦

随机推荐

  1. Android实现圆角矩形和圆形ImageView的方
  2. Android 进程间通信(IPC)
  3. Android Studio 解决The SDK platform-to
  4. Android(安卓)IPC之 Service和Messenger
  5. 【自用】Android中一个简单的计时器,用Han
  6. Android Testing和Instrumentation
  7. Android 文件布局一些细节备忘
  8. android 虚拟按键遮挡布局
  9. Android学习 2 -建立模拟器
  10. 7.Android(安卓)自定义Loader