Avatar billede tinaw25 Nybegynder
18. oktober 2013 - 12:30 Der er 21 kommentarer og
1 løsning

Smelte 2 tabeller sammen, men stadigvæk har hver deres ID?

Hej

Jeg har 2 tabeller som jeg godt vil smelte sammen og har prøvet med UNION, men så har de et fælles ID.

Hvis jeg har to tabeller:

tabel1            tabel2
tab1_id            tab2_id
tab1_navn          tab2_navn

Så bliver det med UNION

tab1_id
tab1_navn

Jeg vil godt have at de bevare hver deres ID, men jeg skal stadigvæk have det i en sql statement?

/Tina
Avatar billede Syska Mester
18. oktober 2013 - 12:40 #1
SELECT tab1_id, tab1_navn FROM tabel1
UNION
SELECT tab2_id as tab1_id, tab2_navn AS tab1_navn FROM tabel2
Avatar billede Syska Mester
18. oktober 2013 - 12:41 #2
Sagt på en anden måde ... du kan rename dine column names så de passer ... så tror jeg du får hvad du vil have.

Ellers må du lige smide lidt mere information.
Avatar billede tinaw25 Nybegynder
18. oktober 2013 - 12:47 #3
Den overruler de navngivninger man giver den.

Så tabellen kommer bare til at se sådan her ud:

tabel_id  tab1_navn

og tabel 2 kommer til at hedde de samme som den anden selvom man navngiver tabel 2
Avatar billede tinaw25 Nybegynder
18. oktober 2013 - 12:51 #4
Jeg skal bruge tabeller hver især, som når man bruger SELECT * FROM tabel1 og SELECT * FROM tabel2

Bare i den samme repeater og samme tid
Avatar billede Syska Mester
18. oktober 2013 - 12:57 #5
så din union kommer til at se sådan her ud:

union table
tab1_id, tab1_navn, tab2_id, tab2_navn?

Det kan godt se at du skal bruger "AS" for alle columns.
Avatar billede Syska Mester
18. oktober 2013 - 13:00 #6
Dette virker for mig:
SELECT ProductId AS P FROM Products
UNION ALL
SELECT ParentProductID AS P FROM Products
Avatar billede tinaw25 Nybegynder
18. oktober 2013 - 13:03 #7
Jeg har skrevet dette her i SQL:

SELECT frugt_id AS frugt_id, frugt_navn AS frugt_navn, vaerdi AS vaerdi FROM frugt
UNION
SELECT groent_id AS groent_id, groent_navn AS groent_navn, groent_vaerdi AS groent_navn FROM groent


Og når jeg exucuter det kommer resultatet til at se sådan her her:

frugt_id    frugt_navn  vaerdi

også er alle resultater blandet sammen med den anden tabel. Jeg vil godt have at resultatet skal se sådan her ud:

frugt_id  frugt_navn vaerdi  groent_id groent_navn groent_vaerdi
Avatar billede jakobdo Ekspert
18. oktober 2013 - 13:07 #8
Så du ønsker et resultat ala:
frugt_id  frugt_navn vaerdi  groent_id groent_navn groent_vaerdi
1        Æble      10
                            2        Agurk      20
3        Pære      20
                            4        Tomat      15

Er det korrekt forstået ?
Avatar billede tinaw25 Nybegynder
18. oktober 2013 - 13:09 #9
jakobda: Lige nøjagtig
Avatar billede Syska Mester
18. oktober 2013 - 13:10 #10
Så skal du select ligemange columns i begge SELECTs.

SELECT '' AS EmptyColumn, gront_id as gront_id FROM table1

I en union skal der være ligemange coulmns i begge udtræk. Nok derfor det går galt.
Avatar billede Syska Mester
18. oktober 2013 - 13:13 #11
altså

SELECT '' AS groent_id, frugt_id AS frugt_id, '' as groent_navn, frugt_navn AS frugt_navn, vaerdi AS vaerdi, '' AS groent_navn FROM frugt
UNION
SELECT groent_id AS groent_id, '' AS frugt_id, groent_navn AS groent_navn, '' AS frugt_navn, '' AS vaerdi, groent_vaerdi AS groent_navn FROM groent

Måske det virker ...
Avatar billede tinaw25 Nybegynder
18. oktober 2013 - 13:14 #12
Lige nøjagtig, den havde jeg sørme ikke selv fundet frem til :-)

Smid et svar
Avatar billede Syska Mester
18. oktober 2013 - 13:30 #13
svar.
Avatar billede tinaw25 Nybegynder
18. oktober 2013 - 13:33 #14
Kan man få den til at lade værd med at udskrive de tomme felter i repeater?
Avatar billede Syska Mester
18. oktober 2013 - 13:47 #15
Tror vi skal se noget kode så ...

Til at starte med kan jeg slet ikke gennemskue hvorfor du vil have så mange columns med ud når du skal have det i samme columns.

Tom er vel tom ... hvis man udskriver noget der er tomt er det vel stadig tomt :-)

Hvad har du i din repeater? Eller nemmere ... hvad er det du vil opnå?
Avatar billede tinaw25 Nybegynder
18. oktober 2013 - 13:52 #16
Man skal kunne vælge 14 stk frugt eller 7 stk grønt.

Til det skal jeg bruge en textbox til det grønne og en textbox til frugten.

Så man kan skrive det antal i textbox og klikke på en knap så den opretter en session og smider over på bekræft siden.
Avatar billede tinaw25 Nybegynder
18. oktober 2013 - 13:53 #17
<div id="content">
        <div id="content_frame">
            <h1 class="overskrift">Lille mixkasse (14 stk frugt + 7 stk grønt)</h1>
            <table border="1" class="tabel1">
                <tr>
                    <td>
                        <asp:CheckBox ID="CheckBox_standard" runat="server" /></td>
                    <td><p>Standard (forudbestemt)</p></td>
                </tr>
             
            </table>
         
            <table border="0" class="tabel2">
            <asp:Repeater ID="VisProdukt" runat="server" OnItemDataBound="VisProdukt_ItemDataBound">
              <HeaderTemplate>
                  <tr>
                        <th colspan="2"><p>Vælg selv frugt (14 stk ialt)</p></th>
                      <th></th>
                      <th colspan="2"><p>Vælg selv grønt (7 stk i alt)</p></th>
                     
                    </tr>
              </HeaderTemplate>
                <ItemTemplate>
           
                <tr>
                    <td>
                        <asp:TextBox ID="TextBox_frugt" runat="server" Width="15" Height="15"></asp:TextBox></td>
                    <td><p><%#Eval("frugt_navn") %></p></td>
                    <td width="60"></td>
                   
                    <td>
                        <asp:TextBox ID="TextBox_groent" runat="server" Width="15" Height="15"></asp:TextBox></td>
                    <td><p><%#ShowColumn(Eval("groent_navn"),"groent_navn:") %></p></td>
                </tr>
           
                    </ItemTemplate>
             
            </asp:Repeater>
            </table>
           
           
        <asp:Button ID="Button_putikurv" runat="server" Text="Læg i kurv" CssClass="knap" Width="80px" Height="30" OnClick="Button_putikurv_Click" />
            <asp:Label ID="Label_vis" runat="server" Text=""></asp:Label>
       
          </div>
     
    </div>
Avatar billede Syska Mester
18. oktober 2013 - 14:08 #18
Hvad vil du så gøre når der er 15 grønsager og kun 2 grugter på listen?

Så kommer til table jo til at se helt mærkelig ud.

Hvorfor skal det være grupperet som frugt i venstre og grønsager i højre?

( Jeg stiller spm for at sikre mig du har tænkt det hele igennem )
Men du kan godt lave dette ... men med måden du nu har data fra din sql hjælper ikke på det.
Måden det er sorteret på hjælper heller ikke.

Men overvejer lige en alternativ ide hvor man måske kan løse det, hvis det virkelig er et krav det skal vises på den måde og de er i to forskellige tables.
Avatar billede Syska Mester
18. oktober 2013 - 14:15 #19
Du kan gøre noget ala:
SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY ProductId) AS [Row],  * FROM uCommerce_Product WHERE ParentProductId IS NULL
) AS t1
FULL OUTER JOIN (SELECT ROW_NUMBER() OVER (ORDER BY ProductId) AS [Row], * FROM uCommerce_Product WHERE ParentProductId IS NOT NULL) t2
ON t1.Row = t2.Row

På den måde kan du merge 2 tables i en flad struktur så du hele tiden har 2 produkter per linje ( grønsager og frugter )

Så burde du kunne fortætte med det du gør nu.
Avatar billede tinaw25 Nybegynder
18. oktober 2013 - 14:42 #20
Sådan her

SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY groent_id) AS [Row],  * FROM groent WHERE groent_id IS NULL
) AS t1
FULL OUTER JOIN (SELECT ROW_NUMBER() OVER (ORDER BY frugt_id) AS [Row], * FROM frugt WHERE frugt_id IS NOT NULL) t2
ON t1.Row = t2.Row

viser den kun den ene tabel og den anden er bare null
Avatar billede tinaw25 Nybegynder
18. oktober 2013 - 14:43 #21
Det skal vises i forskellige tabeller, fordi brugeren ellers ikke ved hvad der er grønsager eller frugt
Avatar billede Syska Mester
18. oktober 2013 - 20:05 #22
Du skal nok ikke have den WHERE clause med ... det var fordi jeg kun lige havde en table at teste med hvor der var data i.

Så bare fjern begge where claues. Så burde det virke.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester