我正在用php实现项目,其中用户有一些书,例如书号为1号书-系列151至175,这意味着1号书有25页,每页都有唯一的书号。从151,152 ... 175。
用户使用一页特定书来生成某种类型的凭证。有时可以为单个页面生成两个凭证,即151A和151B。
所以我需要一个SQL查询,该查询返回从1到175的虚拟行,并与凭证表左连接
就是这样
答案 0 :(得分:1)
如果您的mysql版本支持CTE,则可以尝试使用CTE RECURSIVE
表创建一个Outer JOIN
表的结果集。
或者您可以将WHILE
与临时表配合使用来为序列号创建结果集。
查询#1
WITH RECURSIVE CTE AS (
SELECT start_series,end_series
FROM books
UNION ALL
SELECT start_series + 1,end_series
FROM CTE
WHERE start_series < end_series
)
SELECT c.start_series,
coalesce(CONCAT(c.start_series,v.post_fix),v.voucher_page_no) voucher_no
FROM CTE c LEFT JOIN voucher v
on c.start_series = v.voucher_page_no
ORDER BY c.start_series;
| start_series | voucher_no |
| ------------ | ---------- |
| 151 | 151A |
| 151 | 151B |
| 152 | 152 |
| 153 | 153 |
| 154 | |
| 155 | 155 |
| 156 | |
| 157 | |
| 158 | |
| 159 | |
| 160 | |
| 161 | |
| 162 | |
| 163 | |
| 164 | |
| 165 | |
| 166 | |
| 167 | |
| 168 | |
| 169 | |
| 170 | |
| 171 | |
| 172 | |
| 173 | |
| 174 | |
| 175 | |