Tenho duas tabelas das quais preciso apenas dos resultados que aparecem em uma tabela ( list
) que não aparecem na segunda tabela ( cardinal
). A list
chave primária da tabela é sku
, e a tabela possui uma id
coluna de vestígio (que na verdade não é utilizada no aplicativo no momento). A cardinal
chave primária da tabela é id
. A coluna que deve unir as tabelas é sku
. Estas são as tabelas (apenas campos relevantes, existem outros campos que não colei aqui):
mysql> describe list;
+-----------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+-------+
| id | int(11) | NO | | NULL | |
| name | varchar(63) | YES | | NULL | |
| sku | bigint(20) | NO | PRI | 0 | |
+-----------------+--------------+------+-----+---------+-------+
mysql> describe cardinal;
+------------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| sku | bigint(20) | YES | MUL | NULL | |
+------------------+-------------+------+-----+---------+----------------+
Segue a quantidade de registros em cada tabela:
mysql> SELECT count(*) FROM list;
+----------+
| 2677513 |
+----------+
mysql> SELECT count(*) FROM cardinal;
+----------+
| 970924 |
+----------+
Cada registro na cardinal
tabela tem uma entrada válida para a sku
coluna e todas essas entradas válidas existem na list
tabela. Existem alguns dupes para sku
a cardinal
tabela.
Preciso de todos os registros da list
tabela que não possuem entrada correspondente na cardinal
tabela. No entanto, todos os métodos que estou tentando estão retornando todos os registros da list
tabela ou nenhum registro!
mysql> SELECT count(*) FROM list l LEFT JOIN cardinal c ON c.id=null;
+----------+
| count(*) |
+----------+
| 2677513 |
+----------+
1 row in set (0.49 sec)
mysql> SELECT count(*) FROM list l LEFT OUTER JOIN cardinal c ON l.sku=c.sku where c.id=null;
+----------+
| count(*) |
+----------+
| 0 |
+----------+
A primeira consulta obviamente não sabe corresponder na sku
coluna. Mas o segundo parece que deve funcionar com base em outras respostas que vi online .
Espero que cerca de 1700000 - 2000000 linhas sejam retornadas. Mas certamente não 0 ou a tabela completa. Como devo formular a consulta? Este é o MySQL 5.5.33 em execução no Amazon RDS.
MySQL, de fato, todos os produtos SQL realmente vomitam em
Causa confusão. você realmente quer dizer
Você precisa alterá-lo para
De uma chance !!!
SOBRE SUA PERGUNTA
Sua primeira consulta
assemelha-se a uma junção natural onde nada corresponde na tabela cardeal, então a contagem
2677513
está correta.Sua segunda consulta
é um pouco mais explícito, mas o
c.id=null
faz falhar, obtendo 0 como contagem.