CREATE PROCEDURE `my_procedure` (IN `_year` INT, IN `_month` INT) NO SQL BEGIN SELECT * FROM my_table WHERE year = `_year`and month = `_month`; END;อย่างไรก็ตาม statement นี้ไม่สามารถรันได้ทุกฐานข้อมูล
บางฐานข้อมูลจะแสดงข้อผิดพลาดตามรูปข้างล่างนี้
CREATE PROCEDURE `my_procedure` (IN `_year` INT, IN `_month` INT) NO SQL BEGIN SELECT * FROM my_table WHERE year = `_year`and month = `_month`; END;อย่างไรก็ตาม statement นี้ไม่สามารถรันได้ทุกฐานข้อมูล
PDOException: SQLSTATE[HY000]: General error: 1390 Prepared statement contains too many placeholders in /var/www/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:77แล้ว placeholder มาจากไหน?
SELECT *, 6373 * 2 * ATAN2( SQRT( POW(SIN((lat - [lat0]) * PI() / 180 / 2), 2) + COS(ABS([lat0]) * PI() / 180) * COS(ABS(lat) * PI() / 180) * POW(SIN((lon - [lon0]) * PI() / 180 / 2), 2) ), SQRT(1-( POW(SIN((lat - [lat0]) * PI() / 180 / 2), 2) + COS(ABS([lat0]) * PI() / 180) * COS(ABS(lat) * PI() / 180) * POW(SIN((lon - [lon0]) * PI() / 180 / 2), 2)) ) ) as dist FROM `location` HAVING dist < 1 ORDER BY dist
SELECT *
FROM user_login
WHERE EXISTS (
SELECT 1
FROM user_login AS ul
GROUP BY user_id
HAVING user_id = users_login.user_id AND
MAX(login_at) = user_login.login_at
)
ในทางตรงกันข้าม ถ้าเราต้องการหา record ของการ login เข้าใช้งานครั้งแรกสุดของผู้ใช้งานทุกคน (login_at มีค่าน้อยที่สุด) เราสามารถใช้คำสั่ง SQL ตามด้านล่างนี้ได้เลย
SELECT *
FROM user_login
WHERE EXISTS (
SELECT 1
FROM user_login AS ul
GROUP BY user_id
HAVING user_id = users_login.user_id AND
MIN(login_at) = user_login.login_at
)