多个表的sql连接

yzckvree  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(455)

这里是sql新手,我想让这个表打印出所有拥有特定品牌/车型组合的人的工资、品牌和车型的总和。到目前为止,该表打印出所有汽车品牌和型号值,但sumwage列都为空。sumwage应该返回拥有make/model组合的人员的所有工资的总和(我的select语句一直在代码的底部)?敬请指教!

  1. IF OBJECT_ID ('Person', 'U') IS NULL
  2. BEGIN
  3. CREATE TABLE Person (
  4. ID INT NOT NULL PRIMARY KEY,
  5. Name VARCHAR(32),
  6. BirthDate DATETIME
  7. );
  8. INSERT INTO Person
  9. ( ID, Name, BirthDate )
  10. VALUES
  11. (311113, 'Dan Lu', '01-22-33'),
  12. (123456, 'Seven Durant', '07-22-94'),
  13. (100100, 'Choochootrain Lu', '12-17-56'),
  14. (106542, 'Spider Ru', '07-22-36'),
  15. (101010, 'Ru Ru', '04-30-84');
  16. END
  17. IF OBJECT_ID ('Job', 'U') IS NULL
  18. BEGIN
  19. CREATE TABLE Job (
  20. ID INT NOT NULL PRIMARY KEY,
  21. Company VARCHAR(64),
  22. Wage FLOAT,
  23. PersonID INT FOREIGN KEY REFERENCES Person(ID)
  24. );
  25. INSERT INTO Job
  26. ( ID, Company, Wage, PersonID )
  27. VALUES
  28. (01, 'Space Pizza Space', 1000.00, 311113),
  29. (02, 'Bread', 46.44, 101010),
  30. (03, 'Delivery Service', 400.99, 100100),
  31. (04, 'Nike', 999900.01, 106542),
  32. (05, 'Old McDonald', 6500210.77, 123456);
  33. END
  34. IF OBJECT_ID ('Car', 'U') IS NULL
  35. BEGIN
  36. CREATE TABLE Car (
  37. ID INT NOT NULL PRIMARY KEY,
  38. Make VARCHAR(32),
  39. Model VARCHAR(32)
  40. );
  41. INSERT INTO Car
  42. ( ID, Make, Model )
  43. VALUES
  44. (1234, 'Lexus', 'SE'),
  45. (4444, 'Tesla', 'X'),
  46. (5007, 'Chevy', 'Cobalt'),
  47. (7771, 'Ford', 'Runner'),
  48. (6459, 'Toyota', 'Camry');
  49. END
  50. IF OBJECT_ID ('PersonCar', 'U') IS NULL
  51. BEGIN
  52. CREATE TABLE PersonCar (
  53. ID INT,
  54. PersonID INT FOREIGN KEY REFERENCES Person(ID),
  55. CarID INT
  56. );
  57. INSERT INTO PersonCar
  58. ( ID, PersonID, CarID )
  59. VALUES
  60. (1, 311113, 1234),
  61. (2, 123456, 4444),
  62. (3, 100100, 5007),
  63. (4, 106542, 7771),
  64. (5, 101010, 6459);
  65. END
  66. SELECT SUM(Wage) AS SumWages, Car.Make, Car.Model
  67. FROM Person
  68. INNER JOIN PersonCar
  69. ON PersonCar.ID = Person.ID
  70. INNER JOIN Job
  71. ON Job.PersonID = PersonCar.ID
  72. Right JOIN Car
  73. ON Car.ID = Person.ID
  74. GROUP BY Wage, Make, Model;
hs1ihplo

hs1ihplo1#

我认为你想要:

  1. SELECT SUM(j.Wage) AS SumWages, c.Make, c.Model
  2. FROM Car c
  3. LEFT JOIN PersonCar pc ON pc.CarID = c.ID
  4. LEFT JOIN Job j ON j.PersonID = pc.PersonID
  5. GROUP BY c.Make, c.Model;

这将选择所有 Car s、 并遵循指向job表的关系,该表包含 Wage 每一个车主。数据按car模型和model进行聚合,并求出相应的工资。
当给定的make/model元组没有车主时,求和结果为 null (如果只想从结果集中删除这些行,请使用 INNER JOIN s而不是 LEFT JOIN s) 是的。
请注意,您不需要携带 Person 表以获取此结果集。

fslejnso

fslejnso2#

嘿,看起来你的连接有几个错误,看看是否像下面那样切换你的连接“开”,并将最后一个连接从右改为内。

  1. SELECT
  2. SUM(Job.Wage) AS SumWages
  3. , Car.Make
  4. , Car.Model
  5. FROM
  6. Person
  7. INNER JOIN PersonCar
  8. ON PersonCar.PersonID = Person.ID
  9. INNER JOIN Job
  10. ON Job.PersonID = PersonCar.ID
  11. INNER JOIN Car
  12. ON Car.ID = PersonCar.CarID
  13. GROUP BY SumWages, Make, Model
  14. ;

相关问题