您好,请帮助我解决问题。
SELECT DISTINCT A.titulo as 'Periodicas', B.titulo as 'No periodicas'
FROM publicacion A, Publicacion B, periodicas
WHERE A.idPublicacion=periodicas.Publicacion_idPublicacion
AND B.idPublicacion NOT IN (SELECT periodicas.Publicacion_idPublicacion FROM periodicas)
我想分发期刊和非期刊。
+--------------+---------------+
| Periodicas | No periodicas |
+------+-------+---------------+
| Publica 1 | Publica 5 |
| Publica 2 | Publica 5 |
| Publica 3 | Publica 5 |
| Publica 4 | Publica 5 |
+--------------+---------------+
因为我每次都只重复一次“无期刊”的出版物。 Eh使用DISTINCT测试,但我不能这样做只显示一次。
数据:
表“Publicacion”
+---------------+---------------+
| idPublicacion | titulo |
+---------------+---------------+
| 1 | Publica 1 |
| 2 | Publica 2 |
| 3 | Publica 3 |
| 4 | Publica 4 |
| 5 | Publica 5 |
+---------------+---------------+
表周期:
+--------------+---------------------------+
| idPeriodica | Publicacion_idPublicacion |
+------+-------+---------------------------+
| 10 | 1 |
| 11 | 2 |
| 12 | 3 |
| 13 | 4 |
+--------------+---------------------------+
答案 0 :(得分:1)
您正在尝试做一些非常自然的事情,即根据一个表在另一个表中的存在来对其进行分类。
但是你也试图在SQL思维方式中做一些不自然的事情,那就是水平而不是垂直地组织报告。在大多数情况下,您可以在报表程序中而不是在SQL中执行此操作。
这是一个查询(http://sqlfiddle.com/#!9/9ff57/8/0),它将执行项目的第一部分。
SELECT CASE WHEN b.titulo IS NULL THEN 'No Periodico' ELSE 'Periodico' END tipo,
a.idPublicacion,
b.idPeriodica,
a.titulo
FROM Pub a
LEFT JOIN Per b ON a.titulo = b.titulo
第二部分在MySQL中是不合理的。您需要执行一个名为pivot的操作。问题在于,你没有自然的方式将你的期刊和非期刊层压在一起。