SELECT with left join and union











up vote
0
down vote

favorite
1












I have this query that return invoices made on a certain employee shift



SELECT
i.dateTime,i.amount,i.totalProfit,i.shiftID,
i_o.itemID,i_o.quantity,
item.name itemName,
p.full_name

from invoice i

LEFT JOIN
inv_order i_o on i_o.invID=i.invID

LEFT JOIN
`item-service` item on item.itemID = i_o.itemID


LEFT JOIN person p on
p.PID=i.personID

where i.shiftID =97


but then, i need to get the employee name from the employee table, and i only have the shiftID.



SELECT
i.dateTime,i.type,i.amount,i.totalProfit,i.shiftID,i_o.itemID,i_o.quantity,item.name itemName,p.full_name

from invoice i

LEFT JOIN
inv_order i_o on i_o.invID=i.invID

LEFT JOIN
`item-service` item on item.itemID = i_o.itemID


LEFT JOIN person p on
p.PID=i.personID

where i.shiftID =97

UNION

SELECT e.name from employee e

left join shift s on s.empID = e.empID

where s.shiftID =97


the mysql return this error



The used SELECT statements have a different number of columns










share|improve this question




























    up vote
    0
    down vote

    favorite
    1












    I have this query that return invoices made on a certain employee shift



    SELECT
    i.dateTime,i.amount,i.totalProfit,i.shiftID,
    i_o.itemID,i_o.quantity,
    item.name itemName,
    p.full_name

    from invoice i

    LEFT JOIN
    inv_order i_o on i_o.invID=i.invID

    LEFT JOIN
    `item-service` item on item.itemID = i_o.itemID


    LEFT JOIN person p on
    p.PID=i.personID

    where i.shiftID =97


    but then, i need to get the employee name from the employee table, and i only have the shiftID.



    SELECT
    i.dateTime,i.type,i.amount,i.totalProfit,i.shiftID,i_o.itemID,i_o.quantity,item.name itemName,p.full_name

    from invoice i

    LEFT JOIN
    inv_order i_o on i_o.invID=i.invID

    LEFT JOIN
    `item-service` item on item.itemID = i_o.itemID


    LEFT JOIN person p on
    p.PID=i.personID

    where i.shiftID =97

    UNION

    SELECT e.name from employee e

    left join shift s on s.empID = e.empID

    where s.shiftID =97


    the mysql return this error



    The used SELECT statements have a different number of columns










    share|improve this question


























      up vote
      0
      down vote

      favorite
      1









      up vote
      0
      down vote

      favorite
      1






      1





      I have this query that return invoices made on a certain employee shift



      SELECT
      i.dateTime,i.amount,i.totalProfit,i.shiftID,
      i_o.itemID,i_o.quantity,
      item.name itemName,
      p.full_name

      from invoice i

      LEFT JOIN
      inv_order i_o on i_o.invID=i.invID

      LEFT JOIN
      `item-service` item on item.itemID = i_o.itemID


      LEFT JOIN person p on
      p.PID=i.personID

      where i.shiftID =97


      but then, i need to get the employee name from the employee table, and i only have the shiftID.



      SELECT
      i.dateTime,i.type,i.amount,i.totalProfit,i.shiftID,i_o.itemID,i_o.quantity,item.name itemName,p.full_name

      from invoice i

      LEFT JOIN
      inv_order i_o on i_o.invID=i.invID

      LEFT JOIN
      `item-service` item on item.itemID = i_o.itemID


      LEFT JOIN person p on
      p.PID=i.personID

      where i.shiftID =97

      UNION

      SELECT e.name from employee e

      left join shift s on s.empID = e.empID

      where s.shiftID =97


      the mysql return this error



      The used SELECT statements have a different number of columns










      share|improve this question















      I have this query that return invoices made on a certain employee shift



      SELECT
      i.dateTime,i.amount,i.totalProfit,i.shiftID,
      i_o.itemID,i_o.quantity,
      item.name itemName,
      p.full_name

      from invoice i

      LEFT JOIN
      inv_order i_o on i_o.invID=i.invID

      LEFT JOIN
      `item-service` item on item.itemID = i_o.itemID


      LEFT JOIN person p on
      p.PID=i.personID

      where i.shiftID =97


      but then, i need to get the employee name from the employee table, and i only have the shiftID.



      SELECT
      i.dateTime,i.type,i.amount,i.totalProfit,i.shiftID,i_o.itemID,i_o.quantity,item.name itemName,p.full_name

      from invoice i

      LEFT JOIN
      inv_order i_o on i_o.invID=i.invID

      LEFT JOIN
      `item-service` item on item.itemID = i_o.itemID


      LEFT JOIN person p on
      p.PID=i.personID

      where i.shiftID =97

      UNION

      SELECT e.name from employee e

      left join shift s on s.empID = e.empID

      where s.shiftID =97


      the mysql return this error



      The used SELECT statements have a different number of columns







      mysql select left-join union unions






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 19 at 0:47

























      asked Nov 19 at 0:41









      Aly Al Ameen

      15119




      15119
























          1 Answer
          1






          active

          oldest

          votes

















          up vote
          1
          down vote



          accepted










          The error message is quite clear as to the problem: your first query returns 8 columns of data and your second only 1, so you can't UNION them. It seems you probably want to just JOIN the employee table via the shift table e.g.



          SELECT i.dateTime
          ,i.type
          ,i.amount
          ,i.totalProfit
          ,i.shiftID
          ,i_o.itemID
          ,i_o.quantity
          ,item.name AS itemName
          ,p.full_name
          ,e.name
          FROM invoice i
          LEFT JOIN inv_order i_o ON i_o.invID=i.invID
          LEFT JOIN `item-service` item ON item.itemID = i_o.itemID
          LEFT JOIN person p ON p.PID=i.personID
          LEFT JOIN shift s ON s.shiftID = i.shiftID
          LEFT JOIN employee e ON e.empID = s.empID
          WHERE i.shiftID = 97





          share|improve this answer





















          • yes, that's exactly what i want :))
            – Aly Al Ameen
            Nov 19 at 0:57











          Your Answer






          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: "1"
          };
          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',
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          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%2fstackoverflow.com%2fquestions%2f53366939%2fselect-with-left-join-and-union%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








          up vote
          1
          down vote



          accepted










          The error message is quite clear as to the problem: your first query returns 8 columns of data and your second only 1, so you can't UNION them. It seems you probably want to just JOIN the employee table via the shift table e.g.



          SELECT i.dateTime
          ,i.type
          ,i.amount
          ,i.totalProfit
          ,i.shiftID
          ,i_o.itemID
          ,i_o.quantity
          ,item.name AS itemName
          ,p.full_name
          ,e.name
          FROM invoice i
          LEFT JOIN inv_order i_o ON i_o.invID=i.invID
          LEFT JOIN `item-service` item ON item.itemID = i_o.itemID
          LEFT JOIN person p ON p.PID=i.personID
          LEFT JOIN shift s ON s.shiftID = i.shiftID
          LEFT JOIN employee e ON e.empID = s.empID
          WHERE i.shiftID = 97





          share|improve this answer





















          • yes, that's exactly what i want :))
            – Aly Al Ameen
            Nov 19 at 0:57















          up vote
          1
          down vote



          accepted










          The error message is quite clear as to the problem: your first query returns 8 columns of data and your second only 1, so you can't UNION them. It seems you probably want to just JOIN the employee table via the shift table e.g.



          SELECT i.dateTime
          ,i.type
          ,i.amount
          ,i.totalProfit
          ,i.shiftID
          ,i_o.itemID
          ,i_o.quantity
          ,item.name AS itemName
          ,p.full_name
          ,e.name
          FROM invoice i
          LEFT JOIN inv_order i_o ON i_o.invID=i.invID
          LEFT JOIN `item-service` item ON item.itemID = i_o.itemID
          LEFT JOIN person p ON p.PID=i.personID
          LEFT JOIN shift s ON s.shiftID = i.shiftID
          LEFT JOIN employee e ON e.empID = s.empID
          WHERE i.shiftID = 97





          share|improve this answer





















          • yes, that's exactly what i want :))
            – Aly Al Ameen
            Nov 19 at 0:57













          up vote
          1
          down vote



          accepted







          up vote
          1
          down vote



          accepted






          The error message is quite clear as to the problem: your first query returns 8 columns of data and your second only 1, so you can't UNION them. It seems you probably want to just JOIN the employee table via the shift table e.g.



          SELECT i.dateTime
          ,i.type
          ,i.amount
          ,i.totalProfit
          ,i.shiftID
          ,i_o.itemID
          ,i_o.quantity
          ,item.name AS itemName
          ,p.full_name
          ,e.name
          FROM invoice i
          LEFT JOIN inv_order i_o ON i_o.invID=i.invID
          LEFT JOIN `item-service` item ON item.itemID = i_o.itemID
          LEFT JOIN person p ON p.PID=i.personID
          LEFT JOIN shift s ON s.shiftID = i.shiftID
          LEFT JOIN employee e ON e.empID = s.empID
          WHERE i.shiftID = 97





          share|improve this answer












          The error message is quite clear as to the problem: your first query returns 8 columns of data and your second only 1, so you can't UNION them. It seems you probably want to just JOIN the employee table via the shift table e.g.



          SELECT i.dateTime
          ,i.type
          ,i.amount
          ,i.totalProfit
          ,i.shiftID
          ,i_o.itemID
          ,i_o.quantity
          ,item.name AS itemName
          ,p.full_name
          ,e.name
          FROM invoice i
          LEFT JOIN inv_order i_o ON i_o.invID=i.invID
          LEFT JOIN `item-service` item ON item.itemID = i_o.itemID
          LEFT JOIN person p ON p.PID=i.personID
          LEFT JOIN shift s ON s.shiftID = i.shiftID
          LEFT JOIN employee e ON e.empID = s.empID
          WHERE i.shiftID = 97






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 19 at 0:49









          Nick

          20.4k51434




          20.4k51434












          • yes, that's exactly what i want :))
            – Aly Al Ameen
            Nov 19 at 0:57


















          • yes, that's exactly what i want :))
            – Aly Al Ameen
            Nov 19 at 0:57
















          yes, that's exactly what i want :))
          – Aly Al Ameen
          Nov 19 at 0:57




          yes, that's exactly what i want :))
          – Aly Al Ameen
          Nov 19 at 0:57


















           

          draft saved


          draft discarded



















































           


          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53366939%2fselect-with-left-join-and-union%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

          Paul Cézanne

          UIScrollView CustomStickyHeader Resize height generates problems when scroll is too fast

          Angular material date-picker (MatDatepicker) auto completes the date on focus out