Listing people with their phone numbers (if any)List of students with their classname in current yearEfficiently accessing the databaseDatabase design with information of employees, their jobs, salaries and projectsListing employees and their project tasksComparing client lists with Cross JoinsGathering distinct patient diagnosis recordsSelecting product variants that satisfy all option criteriaSpeed up SQL queryRunning SQL Queries On A Worksheet (With Set Of Random Numbers Between 1-20 Filling Column A) Handled As An ADO

How to format long polynomial?

A case of the sniffles

Is it unprofessional to ask if a job posting on GlassDoor is real?

Does detail obscure or enhance action?

If human space travel is limited by the G force vulnerability, is there a way to counter G forces?

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

Important Resources for Dark Age Civilizations?

Why does Kotter return in Welcome Back Kotter?

"You are your self first supporter", a more proper way to say it

Perform and show arithmetic with LuaLaTeX

Theorems that impeded progress

How to determine what difficulty is right for the game?

Roll the carpet

Why can't we play rap on piano?

Can an x86 CPU running in real mode be considered to be basically an 8086 CPU?

Why is 150k or 200k jobs considered good when there's 300k+ births a month?

When a company launches a new product do they "come out" with a new product or do they "come up" with a new product?

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

What does "Puller Prush Person" mean?

Does an object always see its latest internal state irrespective of thread?

What typically incentivizes a professor to change jobs to a lower ranking university?

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

Revoked SSL certificate

What is a clear way to write a bar that has an extra beat?



Listing people with their phone numbers (if any)


List of students with their classname in current yearEfficiently accessing the databaseDatabase design with information of employees, their jobs, salaries and projectsListing employees and their project tasksComparing client lists with Cross JoinsGathering distinct patient diagnosis recordsSelecting product variants that satisfy all option criteriaSpeed up SQL queryRunning SQL Queries On A Worksheet (With Set Of Random Numbers Between 1-20 Filling Column A) Handled As An ADO






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








1












$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$


















    1












    $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$














      1












      1








      1





      $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 6 mins ago









      200_success

      131k17157422




      131k17157422










      asked 12 hours ago









      potatopotato

      29710




      29710




















          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

                    कुँवर स्रोत दिक्चालन सूची"कुँवर""राणा कुँवरके वंशावली"

                    Why is a white electrical wire connected to 2 black wires?How to wire a light fixture with 3 white wires in box?How should I wire a ceiling fan when there's only three wires in the box?Two white, two black, two ground, and red wire in ceiling box connected to switchWhy is there a white wire connected to multiple black wires in my light box?How to wire a light with two white wires and one black wireReplace light switch connected to a power outlet with dimmer - two black wires to one black and redHow to wire a light with multiple black/white/green wires from the ceiling?Ceiling box has 2 black and white wires but fan/ light only has 1 of eachWhy neutral wire connected to load wire?Switch with 2 black, 2 white, 2 ground and 1 red wire connected to ceiling light and a receptacle?

                    चैत्य भूमि चित्र दीर्घा सन्दर्भ बाहरी कडियाँ दिक्चालन सूची"Chaitya Bhoomi""Chaitya Bhoomi: Statue of Equality in India""Dadar Chaitya Bhoomi: Statue of Equality in India""Ambedkar memorial: Centre okays transfer of Indu Mill land"चैत्यभमि