加入并格式化结果集

Join and format a resultset

你好请帮我解决一个问题

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

因为我只有一篇文章,就是"No periodica"每次都重复。嗯,使用 DISTINCT 进行了测试,但我不能只显示一次。

数据:

Table "Publicacion"

+---------------+---------------+
| idPublicacion | titulo        |
+---------------+---------------+
| 1             | Publica 1     |
| 2             | Publica 2     |
| 3             | Publica 3     |
| 4             | Publica 4     |
| 5             | Publica 5     |
+---------------+---------------+

Table 期刊:

+--------------+---------------------------+
| idPeriodica  | Publicacion_idPublicacion |
+------+-------+---------------------------+
| 10           |         1                 |
| 11           |         2                 |
| 12           |         3                 |
| 13           |         4                 |
+--------------+---------------------------+

您正在尝试做一些非常自然的事情,即根据它们在另一个 table 中的存在对一个 table 的行进行分类。

但是您也在尝试以 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 太难了。你需要做一个叫做枢轴的操作。问题是您没有自然的方式将期刊和非期刊层压在一起。