簡體   English   中英

MySQL-更新t1的t2行計數,其中兩列與t1相同

[英]Mysql - update t1 with count of t2 rows where two columns are the same as for t1

我有兩個表t1t2 ,並希望作為輸出t1並添加列,以給出t2中存在(id,category)的行數。

以下是有關小型數據集的示例:

CREATE TABLE IF NOT EXISTS `t1` (
  `key` int(11) NOT NULL,
  `id` int(11) NOT NULL,
  `category` int(11) NOT NULL,
  PRIMARY KEY (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `t1` (`key`, `id`, `category`) VALUES
(1, 12, 101),
(2, 12, 104),
(3, 13, 102),
(4, 14, 101),
(5, 15, 102);


CREATE TABLE IF NOT EXISTS `t2` (
  `key` int(11) NOT NULL,
  `id` int(11) NOT NULL,
  `category` int(11) NOT NULL,
  PRIMARY KEY (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `t2` (`key`, `id`, `category`) VALUES
(1, 12, 101),
(2, 12, 102),
(3, 13, 101),
(4, 13, 104),
(5, 12, 101),
(6, 15, 102);

這是我希望得到的輸出 ,最后一列是所需的信息:

t1 updated
key, id, category, count_t2_id_category
1, 12, 101, 2     # because (12,101) appears 2 times in t2
2, 12, 104, 0     # because (12,104) appears 0 times in t2
3, 13, 102, 0     # etc
4, 14, 101, 0
5, 15, 102, 1

我嘗試使用以下命令作為開始,但是它錯過了輸出中的一些t1行:

SELECT *
FROM t1
LEFT OUTER JOIN t2 ON t1.id=t2.id AND t1.category = t2.category
GROUP BY t1.id

輸出缺少t1鍵#2:

key id  category    key id  category    
1   12  101 1   12  101 
3   13  102 NULL    NULL    NULL    
4   14  101 NULL    NULL    NULL    
5   15  102 6   15  102 

由於您要為不匹配的行設置零值,因此它適用於LEFT JOIN ,例如:

SELECT 
  t1.*, 
  IF(t2.`key` IS NULL, 0, COUNT(t1.`key`)) AS t2_row_count 
FROM 
  t1 
    LEFT JOIN t2 
      ON t1.id=t2.id 
      AND 
      t1.category=t2.category 
GROUP BY 
  t1.`key`

我們計算t1.key是因為對於匹配的行,它們在第一張表中(而不是第二表)將是相同的-因此,我們應該按它分組-而不是第二張表中的字段。

提示 :避免使用mysql保留字命名您的表/列。 如果您不小心忘記了反引號,這將節省大量時間。

首先,請將您的列名鍵更改為recid coz鍵是mysql的保留字

選擇t1.recid,t1.id,t1.category,count(t2.category)作為從t1左聯接t2到t1.id = t2.id AND t1.category = t2.category GROUP BY t1.id,t1的計數。類別

暫無
暫無

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

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