2015-06-25 49 views
-3

您好請幫我解決一個問題。加入並格式化結果集

​​

我想分開期刊和非期刊出版物。

+--------------+---------------+ 
| Periodicas | No periodicas | 
+------+-------+---------------+ 
| Publica 1 | Publica 5  | 
| Publica 2 | Publica 5  | 
| Publica 3 | Publica 5  | 
| Publica 4 | Publica 5  | 
+--------------+---------------+ 

因爲我只有一個發佈是「無週期」每次重複。呃使用DISTINCT進行測試,但我不能這樣做只顯示一次。

數據:

表 「Publicacion」

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

表Periodicas:

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

你加入了3張表,但只有兩個連接的條件,所以你得到了一個部分笛卡爾產品。使用prop'JOIN'重寫併爲所有表提供連接條件。 –

+0

它看起來像一個自我加入一分鐘,然後不是下一個。我沒有看到輸出可能在一行中。你能否至少提供一些樣本數據 – Drew

+0

連接有問題,沒有樣本數據瞭解期刊與非期刊,沒有架構提供。以上是真的很差的樣本數據 – Drew

回答

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中很不合理。你需要做一個稱爲樞軸的操作。問題在於,你沒有自然的方式將你的期刊和非期刊疊加在一起。

+0

感謝您的幫助! – Jonatan