treffynnon / sqlstyle.guide

A consistent code style guide for SQL to ensure legible and maintainable projects

Home Page:https://www.sqlstyle.guide

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Indenting parenthesized table references

fulldecent opened this issue · 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:

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.