我有三個表,如數據,飽和度,值,其中:SQL連接而無需多行
CREATE TABLE DATA(
data_id INT AUTO_INCREMENT,
PRIMARY KEY(data_id)
);
CREATE TABLE VALUE(
value_id INT AUTO_INCREMENT,
data_id INT,
sample INT,
channel_1 DOUBLE,
channel_2 DOUBLE,
channel_3 DOUBLE,
PRIMARY KEY (value_id),
FOREIGN KEY(data_id) REFERENCES DATA(data_id)
);
CREATE TABLE SATURATION(
saturation_id INT AUTO_INCREMENT,
data_id INT,
sample INT,
channel_1 INT CHECK (channel_1 >= 0 AND channel_1 <= 1),
channel_2 INT CHECK (channel_2 >= 0 AND channel_2 <= 1),
channel_3 INT CHECK (channel_3 >= 0 AND channel_2 <= 3),
PRIMARY KEY (saturation_id),
FOREIGN KEY(data_id) REFERENCES DATA(data_id)
);
我已經查詢關鍵詞,比如:
SELECT s.sample AS 'S Sample', s.channel_1 AS '#Ch_1 S', s.channel_2 AS '#Ch_2 ES', s.channel_3 AS '#Ch_3 ES',
v.sample AS 'V Sample', v.channel_1 AS '#Ch_1 V', v.channel_2 AS '#Ch_2 V', v.channel_3 AS '#Ch_3 V'
FROM VALUE v
LEFT OUTER JOIN SATURATION s
ON v.data_id = s.data_id
WHERE s.sample = v.sample AND s.data_id = 1;
結果是好的,如果數量樣本在一個系列中是相等的。但我想要這樣的事情:
----------- | ES Sample | #Ch_1 ES | #Ch_2 ES | #Ch_3 ES | EV Sample | #Ch_1 EV | #Ch_2 EV | #Ch_3 EV | ----------- | 1 | 1 | 0 | 1 | 1 | 114.5 | 10.2 | 114.5 | ----------- | 2 | 0 | 0 | 1 | 2 | 114.5 | 10.2 | 114.5 | ----------- | 3 | 0 | 0 | 1 | 3 | 114.5 | 10.2 | 114.5 | ----------- | 4 | 1 | 0 | 1 | 4 | 114.5 | 10.2 | 114.5 | ----------- | null | null | null | null | 5 | 114.5 | 10.2 | 114.5 | -----------
如何做到這一點?通常沒有子句's.sample = v.sample'我得到this。我不想在一個表中存儲飽和度和價值,但我猜這是非常簡單和愚蠢的解決方案。
UPDATE:
下面是其產生result因爲我想(如果我比飽和度在同一系列中有多個值)的查詢:
SELECT v.data_id AS 'V ID', s.data_id AS 'S ID', s.sample AS 'S Sample', s.channel_1 AS '#Ch_1 S', s.channel_2 AS '#Ch_2 S', s.channel_3 AS '#Ch_3 S',
v.sample AS 'V Sample', v.channel_1 AS '#Ch_1 V', v.channel_2 AS '#Ch_2 V', v.channel_3 AS '#Ch_3 V'
FROM SATURATION s RIGHT JOIN VALUE v ON v.sample = s.sample
WHERE (v.data_id = 1 OR s.data_id IS NULL) AND (s.data_id = 1 OR s.data_id IS NULL);
是一個樣的事情,這可能是有價值的數據和飽和度數據或兩者(您可能要添加一個樣品表,FK這兩個值和飽和度表,並從該驅動器的查詢,左側的接合部的其他表),還是每個類型都是一個單獨的樣本? (在這種情況下,你正在做的是獲得兩個不相關的系列,並將它們並排放在一起?然後一個FULL OUTER JOIN可能會做你所問的,但可能不是真正的解決方案,這可能是應該在應用程序中完成的事情層不是SQL –
@JamesCasey,樣品是可能有值數據與飽和或兩者兼而有之。但有時我們可能會失去價值/ satur的樣品的事情。當我們從設備收集數據,因此應用層應合併這兩個查詢下面與8列一個表?正如我想要的嗎? '選擇es.sample AS 's採樣',s.channel_1 AS '#CH_1 S',s.channel_2 AS '#CH_2 S',s.channel_3 AS「 #Ch_3 S' FROM SATURATION s WHERE s.data_id = 1;' 'SELECT v.sample AS'V Sample',v.channel_1 AS'#Ch_1 V',v.channel_2 AS'#Ch_2 V',v .channel_3 AS'#Ch_3 V' FROM值V WHERE v.data_id = 1;' – BlueJack