子查询返回null

时间:2019-03-07 11:29:57

标签: mysql

解决了这个令人困惑的问题,我需要从多个表中获取数据并将它们合并为一个结果。

此查询工作正常:

select simcard.*,customer.name as cuname,mi,ma,co, tot from simcard, customer, 
                (SELECT s.sim_id AS ssim_id, min(datetime) AS mi, max(datetime) AS ma, FLOOR(sum(t.WEIGHT) / 1000) AS tot,
                    (SELECT count(datetime)
                        FROM transactions t 
                        WHERE (t.SIM_ID = ssim_id) AND t.ROWTYPE LIKE '$D' GROUP BY t.sim_id) as co
                        FROM simcard s, transactions t 
                    WHERE (s.sim_id = t.sim_id) AND t.ROWTYPE LIKE '$Z' 
                    AND ( s.customer_id =1 ) GROUP BY s.sim_id) as T
                WHERE (sim_id = ssim_id) AND (simcard.customer_id = customer.id) GROUP BY simcard.SIM_ID

但是,当我向该客户添加新客户和新simcard时,它将返回空白。我猜这是因为在能够进行交易的交易中没有使用sim_id进行交易。

我试图退出,但我刚遇到错误。 我将其范围缩小到第一个子查询,删除第二个子查询并不会导致非空结果,但是由于两个子查询都使用事务表,因此我猜测两个子查询都需要一些左连接。

结构:

DROP TABLE IF EXISTS `customer`;
CREATE TABLE IF NOT EXISTS `customer` (
  `ID` int(10) NOT NULL AUTO_INCREMENT,
  `NAME` varchar(40) DEFAULT NULL,
  `API` int(11) NOT NULL DEFAULT 0,
  PRIMARY KEY (`ID`),
  KEY `CUSTOMER_ID` (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Tabellstruktur `simcard`
--

DROP TABLE IF EXISTS `simcard`;
CREATE TABLE IF NOT EXISTS `simcard` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `SIM_ID` char(20) DEFAULT NULL,
  `CUSTOMER_ID` char(10) DEFAULT NULL,
  `SCALES_ID` char(10) DEFAULT NULL,
  `NAME` varchar(40) DEFAULT NULL,
  `ACTIVE` char(1) DEFAULT 'N',
  `EMAIL` varchar(255) DEFAULT NULL,
  `TARGET_WEIGHT` varchar(255) DEFAULT NULL,
  `LICENSE` tinyint(1) NOT NULL DEFAULT 0,
  PRIMARY KEY (`ID`),
  KEY `SIM_ID` (`SIM_ID`),
  KEY `CUSTOMER_ID` (`CUSTOMER_ID`),
  KEY `SCALES_ID` (`SCALES_ID`),
  KEY `SIM_ID_2` (`SIM_ID`,`CUSTOMER_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Tabellstruktur `transactions`
--

DROP TABLE IF EXISTS `transactions`;
CREATE TABLE IF NOT EXISTS `transactions` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `SCALES_ID` char(10) DEFAULT NULL,
  `SIM_ID` char(20) DEFAULT NULL,
  `ROWTYPE` char(2) DEFAULT NULL,
  `DATETIME` datetime DEFAULT NULL,
  `TRANSACTIONTIME` int(11) DEFAULT NULL,
  `NAME` varchar(255) DEFAULT NULL,
  `TRANSACTIONNUMBER` int(11) DEFAULT NULL,
  `DATA0` varchar(255) DEFAULT NULL,
  `DATA1` varchar(255) DEFAULT NULL,
  `DATA2` varchar(255) DEFAULT NULL,
  `DATA3` varchar(255) DEFAULT NULL,
  `DATA4` varchar(255) DEFAULT NULL,
  `DATA5` varchar(255) DEFAULT NULL,
  `DATA6` varchar(255) DEFAULT NULL,
  `DATA7` varchar(255) DEFAULT NULL,
  `DATA8` varchar(255) DEFAULT NULL,
  `MEMORY` varchar(255) DEFAULT NULL,
  `MATERIAL` varchar(255) DEFAULT NULL,
  `DENSITY` int(11) DEFAULT NULL,
  `VEHICLETYPE` char(1) DEFAULT NULL,
  `TOOLNAME` varchar(255) DEFAULT NULL,
  `WEIGHT` int(11) DEFAULT NULL,
  `TRANSACTIONID` int(11) DEFAULT NULL,
  `group_id` int(11) NOT NULL DEFAULT 0,
  PRIMARY KEY (`ID`),
  KEY `SIM_ID` (`SIM_ID`),
  KEY `TRANSACTIONID` (`TRANSACTIONID`),
  KEY `SCALES_ID` (`SCALES_ID`),
  KEY `SIM_ID_2` (`SIM_ID`,`TRANSACTIONID`),
  KEY `idx_transactions_ROWTYPE` (`ROWTYPE`),
  KEY `idx_transactions_DATETIME` (`DATETIME`),
  KEY `idx_transactions_DATA0` (`DATA0`),
  KEY `idx_transactions_DATA1` (`DATA1`),
  KEY `idx_transactions_DATA2` (`DATA2`),
  KEY `idx_transactions_DATA3` (`DATA3`),
  KEY `idx_transactions_DATA4` (`DATA4`),
  KEY `idx_transactions_DATA5` (`DATA5`),
  KEY `idx_transactions_DATA6` (`DATA6`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
COMMIT;

预期结果:

ID  SIM_ID          CUSTOMER_ID     SCALES_ID   NAME    ACTIVE  EMAIL   TARGET_WEIGHT   LICENSE cuname              mi                      ma                      co      tot 
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
8   10100421287868  1               61          M-61M   Y       NULL    NULL            0       testcustomer        2018-04-26 00:00:00     2018-08-08 00:00:00     14908   529446 

0 个答案:

没有答案