2
我有一個1:N的關係:MySQL的收集的1:n關係到一個記錄
Rule 1:n Examples
爲了簡化起見,你可以假設,規則和實例只由一個字符串屬性。我在找一個SQL語句,我得到一個表具有以下的列:
rule; example_1; example_2; example_3
我不關心例4和更高...
我有一個1:N的關係:MySQL的收集的1:n關係到一個記錄
Rule 1:n Examples
爲了簡化起見,你可以假設,規則和實例只由一個字符串屬性。我在找一個SQL語句,我得到一個表具有以下的列:
rule; example_1; example_2; example_3
我不關心例4和更高...
我覺得有一個更好的辦法要做到這一點,我俯瞰,但這似乎工作正常。我自己加入了訂購的examples
表,其中每個連續的示例值必須大於前一個值(從而產生前三個中的每一個)。
SELECT
r.rule,
e1.example AS example_1,
e2.example AS example_2,
e3.example AS example_3
FROM rules r
LEFT JOIN (SELECT * FROM examples e ORDER BY example) e1
ON e1.ruleID = r.ruleID
LEFT JOIN (SELECT * FROM examples e ORDER BY example) e2
ON e2.ruleID = r.ruleID
AND e2.example > e1.example
LEFT JOIN (SELECT * FROM examples e ORDER BY example) e3
ON e3.ruleID = r.ruleID
AND e3.example > e2.example
GROUP BY r.ruleID
結果:
| RULE | EXAMPLE_1 | EXAMPLE_2 | EXAMPLE_3 |
|-------|-----------|-----------|-----------|
| rule1 | ex1 | ex2 | ex3 |
| rule2 | ex5 | ex6 | ex7 |
| rule3 | ex8 | (null) | (null) |
| rule4 | (null) | (null) | (null) |
的樣本數據:
/* rules table */
| RULEID | RULE |
|--------|-------|
| 1 | rule1 |
| 2 | rule2 |
| 3 | rule3 |
| 4 | rule4 |
/* examples table */
| EXAMPLE | RULEID |
|---------|--------|
| ex1 | 1 |
| ex2 | 1 |
| ex3 | 1 |
| ex4 | 1 |
| ex5 | 2 |
| ex6 | 2 |
| ex7 | 2 |
| ex8 | 3 |
這裏的工作SQL Fiddle example。