sqlstyle.guide icon indicating copy to clipboard operation
sqlstyle.guide copied to clipboard

Indenting parenthesized table references

Open fulldecent opened this issue 8 years ago • 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

fulldecent avatar Jan 18 '18 16:01 fulldecent

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

treffynnon avatar May 27 '18 23:05 treffynnon

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 ?

treffynnon avatar Jul 18 '18 02:07 treffynnon

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.

fulldecent avatar Jul 18 '18 03:07 fulldecent

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.

pragunbhutani avatar Jul 30 '18 16:07 pragunbhutani