簡體   English   中英

計算另一個表中通過外鍵引用當前行的行

[英]Count rows from another table referencing current row by foreign key

我有如下表格:

inverter [ id, address, ... ]
string [ id, inverter_id (foreign key), ... ]

我想選擇所有“逆變器”,以及附加到它們的“字符串”的數量。

我在這里嘗試了此查詢,但是它給了我空的結果,那么我該怎么做呢?

SELECT inverter.*, COUNT(string.*) as string_count
FROM inverter 
LEFT JOIN string ON string.inverter_id = inverter.id
ORDER BY address

我正在使用SQLite3。


這是我現在擁有的測試表的轉儲:

CREATE TABLE `inverter` (`id` INTEGER NULL PRIMARY KEY AUTOINCREMENT, `address` VARCHAR(3) NULL, `comment` VARCHAR(250) NULL);

INSERT INTO "inverter" ("id","address","comment") VALUES ('2','A1','North side');
INSERT INTO "inverter" ("id","address","comment") VALUES ('3','A2','Broken inverter');
INSERT INTO "inverter" ("id","address","comment") VALUES ('4','A3','');
INSERT INTO "inverter" ("id","address","comment") VALUES ('5','A4','South-west corner');


CREATE TABLE `string` (`id` INTEGER NULL PRIMARY KEY AUTOINCREMENT, `address` VARCHAR(3) NULL, `inverter_id` INTEGER NULL, `comment` VARCHAR(250) NULL, FOREIGN KEY (`inverter_id`) REFERENCES `inverters` (`id`) ON DELETE SET NULL);

INSERT INTO "string" ("id","address","inverter_id","comment") VALUES ('1','XX','3','');
INSERT INTO "string" ("id","address","inverter_id","comment") VALUES ('2','XY','3','Ahoj jak se máš');
INSERT INTO "string" ("id","address","inverter_id","comment") VALUES ('3','XZ','4','Moo');

似乎SQLite3在count(s.*)上令人窒息,因此請嘗試以下操作:

select i.*, count(s.id) 
from inverter i 
left join string s on i.id = s.inverter_id group by i.address;

這給出:

2|A1|North side|0
3|A2|Broken inverter|2
4|A3||1
5|A4|South-west corner|0

使用聚合始終意味着您正在分組,如果不指定分組,它將是包含所有記錄的單個組。 對從inverter表中獲得的字段進行分組。 還可以在count中使用單個字段,而不是string.*

select
  inverter.id, inverter.address, count(string.id) as string_count
from
  inverter 
  left join string on string.inverter_id = inverter.id
group by
  inverter.id, inverter.address
order by
  inverter.address

更改表名稱“字符串”。 那是保留字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM