Indenting parenthesized table references
fulldecent opened this issue · 4 comments
The guide does not appear to have an opinion on indenting parenthesized table references.
SELECT pmt_courses.course_name, pmt_tokens.token, pmt_orders.order_id, wp_users.user_email
FROM wp_pmt_order_token
JOIN pmt_tokens
ON pmt_tokens.id = wp_pmt_order_token.fk_token_id
JOIN pmt_courses
ON pmt_courses.course_id = pmt_tokens.course_id
LEFT JOIN (
pmt_orders
JOIN wp_users
ON wp_users.ID = pmt_orders.user_id
) ON pmt_orders.order_token = pmt_tokens.token
WHERE wp_pmt_order_token.fk_order_id = 28997
Could this matter please be adjudicated?
Note to self: https://dev.mysql.com/doc/refman/5.7/en/join.html
I've given this a little thought, but not sure I've come to a conclusion yet. There are quite a few options, of which, these are just a few. I am not sure I have a strong opinion either way on these.
SELECT pmt_courses.course_name, pmt_tokens.token, pmt_orders.order_id, wp_users.user_email
FROM wp_pmt_order_token
JOIN pmt_courses
ON pmt_courses.course_id = pmt_tokens.course_id
LEFT JOIN (pmt_orders
JOIN wp_users
ON wp_users.ID = pmt_orders.user_id)
ON pmt_orders.order_token = pmt_tokens.token
WHERE wp_pmt_order_token.fk_order_id = 28997
SELECT pmt_courses.course_name, pmt_tokens.token, pmt_orders.order_id, wp_users.user_email
FROM wp_pmt_order_token
JOIN pmt_courses
ON pmt_courses.course_id = pmt_tokens.course_id
LEFT JOIN (pmt_orders JOIN wp_users ON wp_users.ID = pmt_orders.user_id)
ON pmt_orders.order_token = pmt_tokens.token
WHERE wp_pmt_order_token.fk_order_id = 28997
SELECT pmt_courses.course_name, pmt_tokens.token, pmt_orders.order_id, wp_users.user_email
FROM wp_pmt_order_token
JOIN pmt_courses
ON pmt_courses.course_id = pmt_tokens.course_id
LEFT JOIN (pmt_orders JOIN wp_users
ON wp_users.ID = pmt_orders.user_id)
ON pmt_orders.order_token = pmt_tokens.token
WHERE wp_pmt_order_token.fk_order_id = 28997
SELECT pmt_courses.course_name, pmt_tokens.token, pmt_orders.order_id, wp_users.user_email
FROM wp_pmt_order_token
JOIN pmt_courses
ON pmt_courses.course_id = pmt_tokens.course_id
LEFT JOIN ( pmt_orders
JOIN wp_users
ON wp_users.ID = pmt_orders.user_id)
ON pmt_orders.order_token = pmt_tokens.token
WHERE wp_pmt_order_token.fk_order_id = 28997
SELECT pmt_courses.course_name, pmt_tokens.token, pmt_orders.order_id, wp_users.user_email
FROM wp_pmt_order_token
JOIN pmt_courses
ON pmt_courses.course_id = pmt_tokens.course_id
LEFT JOIN (
pmt_orders
JOIN wp_users
ON wp_users.ID = pmt_orders.user_id
)
ON pmt_orders.order_token = pmt_tokens.token
WHERE wp_pmt_order_token.fk_order_id = 28997
SELECT pmt_courses.course_name, pmt_tokens.token, pmt_orders.order_id, wp_users.user_email
FROM wp_pmt_order_token
JOIN pmt_courses
ON pmt_courses.course_id = pmt_tokens.course_id
LEFT JOIN (pmt_orders
JOIN wp_users
ON wp_users.ID = pmt_orders.user_id)
ON pmt_orders.order_token = pmt_tokens.token
WHERE wp_pmt_order_token.fk_order_id = 28997
If I were to pick one it would probably be:
SELECT pmt_courses.course_name, pmt_tokens.token, pmt_orders.order_id, wp_users.user_email
FROM wp_pmt_order_token
JOIN pmt_courses
ON pmt_courses.course_id = pmt_tokens.course_id
LEFT JOIN (pmt_orders JOIN wp_users
ON wp_users.ID = pmt_orders.user_id)
ON pmt_orders.order_token = pmt_tokens.token
WHERE wp_pmt_order_token.fk_order_id = 28997
Have you had any further thoughts on this @fulldecent ?
I have studied some other style guides for this question:
- https://gist.github.com/fredbenenson/7bb92718e19138c20591
- https://github.com/meadmaker/sql-style-guide
- http://leshazlewood.com/software-engineering/sql-style-guide/
And they are all just so far behind the times. They do not provide any useful commentary on the subject.
So just from the looks of it, I will say your choice,
...
LEFT JOIN (pmt_orders JOIN wp_users
ON wp_users.ID = pmt_orders.user_id)
as well as
...
LEFT JOIN ( pmt_orders
JOIN wp_users
ON wp_users.ID = pmt_orders.user_id)
seem categorically better than the others. The "river" rule is strong and should not be violated. Otherwise, the one-liner is a non-answer, since any indentable thing could be a one-line in the right circumstance.
End result, I agree with your choice.
I agree with
LEFT JOIN (pmt_orders JOIN wp_users
ON wp_users.ID = pmt_orders.user_id)
as well because of its adherence to the river rule, which I've found to be very helpful for readability. Subjectively, I find it to be the easiest of all to read.