Listing people with their phone numbers (if any)Insert multiple rows into a SQL tableInner join with first resultEfficiently accessing the databaseSubquery v/s inner join in sql serverComparing client lists with Cross JoinsOptimize query containing too many inner join and rowsQuery using cross join or inner joinSelecting product variants that satisfy all option criteriaIncrease performance of INNER JOIN with subquerySpeed up SQL query

What does it mean to describe someone as a butt steak?

How is the claim "I am in New York only if I am in America" the same as "If I am in New York, then I am in America?

Languages that we cannot (dis)prove to be Context-Free

What would happen to a modern skyscraper if it rains micro blackholes?

Theorems that impeded progress

LaTeX: Why are digits allowed in environments, but forbidden in commands?

Why can't I see bouncing of a switch on an oscilloscope?

Is it possible to run Internet Explorer on OS X El Capitan?

Is it tax fraud for an individual to declare non-taxable revenue as taxable income? (US tax laws)

What does "Puller Prush Person" mean?

Revoked SSL certificate

Important Resources for Dark Age Civilizations?

What is the word for reserving something for yourself before others do?

How do I deal with an unproductive colleague in a small company?

How can I make my BBEG immortal short of making them a Lich or Vampire?

Can a Cauchy sequence converge for one metric while not converging for another?

Replacing matching entries in one column of a file by another column from a different file

Watching something be written to a file live with tail

Why doesn't H₄O²⁺ exist?

Today is the Center

How old can references or sources in a thesis be?

Approximately how much travel time was saved by the opening of the Suez Canal in 1869?

What's the output of a record needle playing an out-of-speed record

Could an aircraft fly or hover using only jets of compressed air?



Listing people with their phone numbers (if any)


Insert multiple rows into a SQL tableInner join with first resultEfficiently accessing the databaseSubquery v/s inner join in sql serverComparing client lists with Cross JoinsOptimize query containing too many inner join and rowsQuery using cross join or inner joinSelecting product variants that satisfy all option criteriaIncrease performance of INNER JOIN with subquerySpeed up SQL query






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








0












$begingroup$


I have the following tables in my database:



people: phones:
+----+------+ +-----------+------------+-------------+
| id | name | | person_id | number | description |
+----+------+ +-----------+------------+-------------+
| 1 | Jade | | 1 | 1234567890 | home |
| 2 | Ben | | 1 | 987654321 | office |
+----+------+ +-----------+------------+-------------+


I use a query with INNER JOIN to select the name and phone numbers for each person:



SELECT
id,
name,
group_concat(
concat(
number,
' (',
description,
')'
) ORDER BY description SEPARATOR ','
) AS phones
FROM people INNER JOIN phones
ON person_id = id
GROUP BY id;


Results from the above query:



+----+------+--------------------------------------+
| id | name | phones |
+----+------+--------------------------------------+
| 1 | Jade | 1234567890 (home),987654321 (office) |
+----+------+--------------------------------------+


But I want to use this query to go through all the people in my database and not just the ones with phone numbers, so I added the following row to the phones table:



INSERT INTO phones VALUES (0, 0, NULL);


And then modified the ON statement of the query to:



ON person_id = id OR person_id = 0


That way every person gets selected even if he has no phone numbers registered in the database:



+----+------+--------------------------------------+
| id | name | phones |
+----+------+--------------------------------------+
| 1 | Jade | 1234567890 (home),987654321 (office) |
| 2 | Ben | NULL |
+----+------+--------------------------------------+


Is this a proper way to achieve this? I don't really like the idea of having to make sure that the 0, 0, NULL row will always stay in the database in order to ensure the queries will work as intended. (since the company I develop this for might decide to clear the database)



This implementation requires calling an ensureNullRow() function every time before using this query, is this a good solution or would you do it differently?










share|improve this question











$endgroup$


















    0












    $begingroup$


    I have the following tables in my database:



    people: phones:
    +----+------+ +-----------+------------+-------------+
    | id | name | | person_id | number | description |
    +----+------+ +-----------+------------+-------------+
    | 1 | Jade | | 1 | 1234567890 | home |
    | 2 | Ben | | 1 | 987654321 | office |
    +----+------+ +-----------+------------+-------------+


    I use a query with INNER JOIN to select the name and phone numbers for each person:



    SELECT
    id,
    name,
    group_concat(
    concat(
    number,
    ' (',
    description,
    ')'
    ) ORDER BY description SEPARATOR ','
    ) AS phones
    FROM people INNER JOIN phones
    ON person_id = id
    GROUP BY id;


    Results from the above query:



    +----+------+--------------------------------------+
    | id | name | phones |
    +----+------+--------------------------------------+
    | 1 | Jade | 1234567890 (home),987654321 (office) |
    +----+------+--------------------------------------+


    But I want to use this query to go through all the people in my database and not just the ones with phone numbers, so I added the following row to the phones table:



    INSERT INTO phones VALUES (0, 0, NULL);


    And then modified the ON statement of the query to:



    ON person_id = id OR person_id = 0


    That way every person gets selected even if he has no phone numbers registered in the database:



    +----+------+--------------------------------------+
    | id | name | phones |
    +----+------+--------------------------------------+
    | 1 | Jade | 1234567890 (home),987654321 (office) |
    | 2 | Ben | NULL |
    +----+------+--------------------------------------+


    Is this a proper way to achieve this? I don't really like the idea of having to make sure that the 0, 0, NULL row will always stay in the database in order to ensure the queries will work as intended. (since the company I develop this for might decide to clear the database)



    This implementation requires calling an ensureNullRow() function every time before using this query, is this a good solution or would you do it differently?










    share|improve this question











    $endgroup$














      0












      0








      0





      $begingroup$


      I have the following tables in my database:



      people: phones:
      +----+------+ +-----------+------------+-------------+
      | id | name | | person_id | number | description |
      +----+------+ +-----------+------------+-------------+
      | 1 | Jade | | 1 | 1234567890 | home |
      | 2 | Ben | | 1 | 987654321 | office |
      +----+------+ +-----------+------------+-------------+


      I use a query with INNER JOIN to select the name and phone numbers for each person:



      SELECT
      id,
      name,
      group_concat(
      concat(
      number,
      ' (',
      description,
      ')'
      ) ORDER BY description SEPARATOR ','
      ) AS phones
      FROM people INNER JOIN phones
      ON person_id = id
      GROUP BY id;


      Results from the above query:



      +----+------+--------------------------------------+
      | id | name | phones |
      +----+------+--------------------------------------+
      | 1 | Jade | 1234567890 (home),987654321 (office) |
      +----+------+--------------------------------------+


      But I want to use this query to go through all the people in my database and not just the ones with phone numbers, so I added the following row to the phones table:



      INSERT INTO phones VALUES (0, 0, NULL);


      And then modified the ON statement of the query to:



      ON person_id = id OR person_id = 0


      That way every person gets selected even if he has no phone numbers registered in the database:



      +----+------+--------------------------------------+
      | id | name | phones |
      +----+------+--------------------------------------+
      | 1 | Jade | 1234567890 (home),987654321 (office) |
      | 2 | Ben | NULL |
      +----+------+--------------------------------------+


      Is this a proper way to achieve this? I don't really like the idea of having to make sure that the 0, 0, NULL row will always stay in the database in order to ensure the queries will work as intended. (since the company I develop this for might decide to clear the database)



      This implementation requires calling an ensureNullRow() function every time before using this query, is this a good solution or would you do it differently?










      share|improve this question











      $endgroup$




      I have the following tables in my database:



      people: phones:
      +----+------+ +-----------+------------+-------------+
      | id | name | | person_id | number | description |
      +----+------+ +-----------+------------+-------------+
      | 1 | Jade | | 1 | 1234567890 | home |
      | 2 | Ben | | 1 | 987654321 | office |
      +----+------+ +-----------+------------+-------------+


      I use a query with INNER JOIN to select the name and phone numbers for each person:



      SELECT
      id,
      name,
      group_concat(
      concat(
      number,
      ' (',
      description,
      ')'
      ) ORDER BY description SEPARATOR ','
      ) AS phones
      FROM people INNER JOIN phones
      ON person_id = id
      GROUP BY id;


      Results from the above query:



      +----+------+--------------------------------------+
      | id | name | phones |
      +----+------+--------------------------------------+
      | 1 | Jade | 1234567890 (home),987654321 (office) |
      +----+------+--------------------------------------+


      But I want to use this query to go through all the people in my database and not just the ones with phone numbers, so I added the following row to the phones table:



      INSERT INTO phones VALUES (0, 0, NULL);


      And then modified the ON statement of the query to:



      ON person_id = id OR person_id = 0


      That way every person gets selected even if he has no phone numbers registered in the database:



      +----+------+--------------------------------------+
      | id | name | phones |
      +----+------+--------------------------------------+
      | 1 | Jade | 1234567890 (home),987654321 (office) |
      | 2 | Ben | NULL |
      +----+------+--------------------------------------+


      Is this a proper way to achieve this? I don't really like the idea of having to make sure that the 0, 0, NULL row will always stay in the database in order to ensure the queries will work as intended. (since the company I develop this for might decide to clear the database)



      This implementation requires calling an ensureNullRow() function every time before using this query, is this a good solution or would you do it differently?







      sql join






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited 3 mins ago









      200_success

      131k17157422




      131k17157422










      asked 12 hours ago









      potatopotato

      29210




      29210




















          1 Answer
          1






          active

          oldest

          votes


















          2












          $begingroup$

          What you are describing is known asLEFT OUTER JOIN



          SELECT
          id,
          name,
          group_concat(
          concat(
          number,
          ' (',
          description,
          ')'
          ) ORDER BY description SEPARATOR ','
          ) AS phones
          FROM people LEFT OUTER JOIN phones
          ON person_id = id
          GROUP BY id;


          inner join => give me only rows with records in both tables
          left outer join => give me all rows of from the left table along with any matching rows in the right..






          share|improve this answer








          New contributor




          Charles is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
          Check out our Code of Conduct.






          $endgroup$













            Your Answer





            StackExchange.ifUsing("editor", function ()
            return StackExchange.using("mathjaxEditing", function ()
            StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
            StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
            );
            );
            , "mathjax-editing");

            StackExchange.ifUsing("editor", function ()
            StackExchange.using("externalEditor", function ()
            StackExchange.using("snippets", function ()
            StackExchange.snippets.init();
            );
            );
            , "code-snippets");

            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "196"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216927%2flisting-people-with-their-phone-numbers-if-any%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            2












            $begingroup$

            What you are describing is known asLEFT OUTER JOIN



            SELECT
            id,
            name,
            group_concat(
            concat(
            number,
            ' (',
            description,
            ')'
            ) ORDER BY description SEPARATOR ','
            ) AS phones
            FROM people LEFT OUTER JOIN phones
            ON person_id = id
            GROUP BY id;


            inner join => give me only rows with records in both tables
            left outer join => give me all rows of from the left table along with any matching rows in the right..






            share|improve this answer








            New contributor




            Charles is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
            Check out our Code of Conduct.






            $endgroup$

















              2












              $begingroup$

              What you are describing is known asLEFT OUTER JOIN



              SELECT
              id,
              name,
              group_concat(
              concat(
              number,
              ' (',
              description,
              ')'
              ) ORDER BY description SEPARATOR ','
              ) AS phones
              FROM people LEFT OUTER JOIN phones
              ON person_id = id
              GROUP BY id;


              inner join => give me only rows with records in both tables
              left outer join => give me all rows of from the left table along with any matching rows in the right..






              share|improve this answer








              New contributor




              Charles is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
              Check out our Code of Conduct.






              $endgroup$















                2












                2








                2





                $begingroup$

                What you are describing is known asLEFT OUTER JOIN



                SELECT
                id,
                name,
                group_concat(
                concat(
                number,
                ' (',
                description,
                ')'
                ) ORDER BY description SEPARATOR ','
                ) AS phones
                FROM people LEFT OUTER JOIN phones
                ON person_id = id
                GROUP BY id;


                inner join => give me only rows with records in both tables
                left outer join => give me all rows of from the left table along with any matching rows in the right..






                share|improve this answer








                New contributor




                Charles is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.






                $endgroup$



                What you are describing is known asLEFT OUTER JOIN



                SELECT
                id,
                name,
                group_concat(
                concat(
                number,
                ' (',
                description,
                ')'
                ) ORDER BY description SEPARATOR ','
                ) AS phones
                FROM people LEFT OUTER JOIN phones
                ON person_id = id
                GROUP BY id;


                inner join => give me only rows with records in both tables
                left outer join => give me all rows of from the left table along with any matching rows in the right..







                share|improve this answer








                New contributor




                Charles is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.









                share|improve this answer



                share|improve this answer






                New contributor




                Charles is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.









                answered 11 hours ago









                CharlesCharles

                1363




                1363




                New contributor




                Charles is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.





                New contributor





                Charles is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.






                Charles is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.



























                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Code Review Stack Exchange!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    Use MathJax to format equations. MathJax reference.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216927%2flisting-people-with-their-phone-numbers-if-any%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    名間水力發電廠 目录 沿革 設施 鄰近設施 註釋 外部連結 导航菜单23°50′10″N 120°42′41″E / 23.83611°N 120.71139°E / 23.83611; 120.7113923°50′10″N 120°42′41″E / 23.83611°N 120.71139°E / 23.83611; 120.71139計畫概要原始内容臺灣第一座BOT 模式開發的水力發電廠-名間水力電廠名間水力發電廠 水利署首件BOT案原始内容《小檔案》名間電廠 首座BOT水力發電廠原始内容名間電廠BOT - 經濟部水利署中區水資源局

                    Prove that NP is closed under karp reduction?Space(n) not closed under Karp reductions - what about NTime(n)?Class P is closed under rotation?Prove or disprove that $NL$ is closed under polynomial many-one reductions$mathbfNC_2$ is closed under log-space reductionOn Karp reductionwhen can I know if a class (complexity) is closed under reduction (cook/karp)Check if class $PSPACE$ is closed under polyonomially space reductionIs NPSPACE also closed under polynomial-time reduction and under log-space reduction?Prove PSPACE is closed under complement?Prove PSPACE is closed under union?

                    Is my guitar’s action too high? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern)Strings too stiff on a recently purchased acoustic guitar | Cort AD880CEIs the action of my guitar really high?Μy little finger is too weak to play guitarWith guitar, how long should I give my fingers to strengthen / callous?When playing a fret the guitar sounds mutedPlaying (Barre) chords up the guitar neckI think my guitar strings are wound too tight and I can't play barre chordsF barre chord on an SG guitarHow to find to the right strings of a barre chord by feel?High action on higher fret on my steel acoustic guitar