加入并格式化结果集

时间:2015-06-25 20:34:57

标签: mysql select join pivot-table

您好,请帮助我解决问题。

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                 |
+--------------+---------------------------+

1 个答案:

答案 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的操作。问题在于,你没有自然的方式将你的期刊和非期刊层压在一起。