在我的數據庫中,潛在顧客可以有很多任務,因此任務表有一個taskable_id和taskable_type,其中taskable_id是lead的id,taskable_type是Lead,遵循Ruby on Rails多態約定。在Mysql中使用LIMIT子查詢
我想爲約會狀態爲1的所有銷售線索選擇第一個任務。就是這樣。結果集應該是一組任務。這是我想出了:
SELECT
`tasks`.*
FROM
`tasks`
WHERE `tasks`.`taskable_id` IN (1, 2)
AND
`tasks`.`taskable_type` = 'Lead'
AND
`tasks`.`id`
IN
(
SELECT `tasks`.`id`
FROM `tasks`
WHERE `tasks`.`taskable_id` IN (1, 2)
AND
`tasks`.`taskable_type` = 'Lead'
AND
'appointment_status' = 1
ORDER BY created_at asc
LIMIT 1
);
但是這給錯誤「該版本的MySQL還不支持「LIMIT & IN/ALL/ANY/SOME子查詢」。其他stackoverflow帖子說,對於這個錯誤,LIMIT必須在子查詢之外。
下面是示例數據:
mysql> SELECT * FROM tasks;
+----+------+--------+-------------+----------+---------------------+---------------------+-----------+---------------------+---------------------+---------------+-------------+
| id | name | status | description | priority | created_at | updated_at | task_type | date_start | date_due | taskable_type | taskable_id |
+----+------+--------+-------------+----------+---------------------+---------------------+-----------+---------------------+---------------------+---------------+-------------+
| 1 | NULL | 2 | NULL | 1 | 2014-09-24 17:53:58 | 2014-09-24 17:53:58 | 1 | 2014-09-25 11:30:00 | 2014-09-25 12:00:00 | Lead | 1 |
| 2 | NULL | 2 | NULL | 1 | 2014-09-25 12:45:50 | 2014-09-25 12:45:50 | 1 | 2014-09-25 12:45:00 | 2014-09-25 13:15:00 | Lead | 2 |
mysql> SELECT id, appointment_status, created_at, updated_at FROM leads;
+----+--------------------+---------------------+---------------------+
| id | appointment_status | created_at | updated_at |
+----+--------------------+---------------------+---------------------+
| 1 | 1 | 2014-09-24 17:45:12 | 2014-09-24 17:53:58 |
| 2 | 1 | 2014-09-25 12:45:46 | 2014-09-25 12:45:50 |
你第二個選項無'on'關鍵字,所以你的連接無效。你基本上將內連接(foo)作爲t1(bar)作爲t2' – 2014-09-25 18:03:09
你可以顯示一些示例數據嗎? – Mihai 2014-09-25 18:03:31
@MarcB但是我沒有看到在這裏會有用的地方。 t1和t2之間沒有關係。我只是想爲所有潛在客戶找到第一個任務。 – Donato 2014-09-25 18:05:17