說,如果我有一個數據庫結構有點像這樣:從多張表中選擇,然後加入到兩個,在MySQL
CREATE TABLE person (
idPerson INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
);
CREATE TABLE detailTypes (
type INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
field VARCHAR(50)
);
CREATE TABLE details (
idPerson INT NOT NULL,
idDetailType INT NOT NULL,
value VARCHAR(50)
);
有了這些數據:
|----------|---------|
| idPerson | Name |
|----------|---------|
| 1 | Tom |
| 2 | Dick |
| 3 | Harry |
|----------|---------|
|----------|----------|
| type | field |
|----------|----------|
| 1 | Diet |
| 2 | Hat size |
|----------|----------|
|----------|------|------------|
| idPerson | type | value |
|----------|------|------------|
| 1 | 1 | Vegetarian |
| 1 | 2 | Medium |
| 2 | 2 | Small |
|----------|------|------------|
而且我要的結果它看起來像這樣:
|----------|----------|------------|
| Name | field | value |
|----------|----------|------------|
| Tom | Diet | Vegetarian |
| Tom | Hat Size | Medium |
| Dick | Diet | NULL |
| Dick | Hat Size | Small |
| Harry | Diet | NULL |
| Harry | Hat Size | NULL |
|----------|----------|------------|
我會認爲,糾正我,如果我錯了,應該實現這個查詢應該看起來像:
SELECT name, field, value
FROM person p, detailTypes t
LEFT JOIN details d
ON p.idPerson = d.idPerson AND t.type = d.type
但MySQL的(32年5月5日)/ PHPMyAdmin中抱怨說, 「 '上條款' 未知列 'p.idPerson'」。你可以圍繞:
SELECT name, field, value
FROM detailTypes t, person p
LEFT JOIN details d
ON p.idPerson = d.idPerson AND t.type = d.type
它有相同的抱怨,除了t.type現在是未知的。
目前的解決方案是一個[戰慄]嵌套查詢,如下:
SELECT name, field, value
FROM (
SELECT type, field, idPerson
FROM person p, detailsType t
) pt
LEFT JOIN pt.idPerson = p.idPerson AND pt.type = t.type
這是一個已知的問題與MySQL?這是我的第一次查詢是錯誤的嗎?我可以做得更好嗎?因爲它似乎並不適合我......
你已經有了四個答案。至少你可以表現出一些熱情,不是嗎? – amenadiel 2014-10-10 11:57:10
糾正你的架構第一 – Karunakar 2014-10-10 12:12:31
@amenadiel給我第二個傢伙,我打字了這個,然後去了一些食物;) – 2014-10-10 12:12:32