Jak odczytać numer ID dla każdego pola z osobna?

0

Witam,
Zaczynam naukę SQL i .NET i mam mały problem z którym nie mogę sobie poradzić. Jest przykładowa baza SQl
pola:

id <auto numeracja>
imie <varchar>
nazwa <varchar>
lokal <varchar>

Mam w niej około 200 pozycji, i teraz jest problem jak odczytać numer id dla każdej z nich z osobna? Pewnie jest to banalnie proste ale nie wiem jak to ugryźć.

dodanie znacznika <code class="html"> - @furious programming

0

Wszystkie pozycje:

select id, imie, nazwa, lokal from tabela; 

Tylko te, których imie to Jan:

select id, imie, nazwa, lokal from tabela where imie='Jan'; 

Tylko id i lokal dla pozycji, których imie to Jan;

select id, lokal from tabela where imie='Jan'; 

Polecam google.

0

To akurat wiem jak, może inaczej: mnie interesuje jak czytać tylko numer id dla każdej pozycji. Muszę ten numer przypisać do zmiennej. Nie znam zawartości w tabeli. SELECT COUNT zliczy mi wszystkie pola, podejrzewam że coś w pętli ale nie znam na tyle SQL żeby to ugryźć.

0

Nie rozumiem (chyba nie tylko ja) co chcesz uzyskać....
Zapytanie SELECT id FROM tabela; zwróci Ci id kolejnych rekordów

Napisz co chcesz zrobić (tzn do czego Ci to dalej potrzebne).

0

Jak sam piszesz zwróci ID wszystkich rekordów w tabeli. Ja chce zwrócić ID pierwszego wiersza którego (nr ID: 2341) i przypisać pod zmienną. Następnie zwrócić ID drugiego wiersza (nr ID:2541). ID jest różne i po ID nie mogę tego zidentyfikować. Ja to rozwiązałem w ten sposób:

with numer_id as
(
SELECT ROW_NUMBER() over (order by id)as numer, id

       FROM tebela
)
select * from numer_id where numer = 2

Funkcja od nowa numeruje tabele i wyprowadza mi numer ID dla np drugiego wiersza. Czy jest może jakieś inne rozwiązanie?

0

no przecież jak będziesz w pętli pobierał

SELECT id FROM tabela ORDER BY id

to możesz sobie już w programie numerować wiersze jeśli musisz, nie ma potrzeby zaprzątać tym głowy bazie danych

0

Nadal nie rozumiem...

ID jest różne i po ID nie mogę tego zidentyfikować.

No własnie dzięki temu że ID jest różne to po nim możesz odnieść się do konkretnego rekordu...

W czym chcesz tego użyć?
Do czego chcesz tego użyć ?

0

A jak znajdziesz id powiedzmy 10 rekordu (ID nie jest numerowane od 1 tylko np od 2100 ale o tym nie wiesz).
Cel jaki chcę osiągnąć to: chcę dodać do tabeli B nowy rekord który zawiera klucz z tabeli A (właśnie ten numer ID).

1

Jak sam piszesz zwróci ID wszystkich rekordów w tabeli. Ja chce zwrócić ID pierwszego wiersza którego (nr ID: 2341) i przypisać pod zmienną.

Tylko jeden obiekt będzie miał ID = 2341. W związku z tym przypisanie tej wartości do zmiennej wystarczy zrobić tak:

int id = 2341;


Jeżeli natomiast chodzi ci o odnalezienie 10tego rekordu (a nie rekordu o id = 10), to tu masz chyba dobry link:
http://stackoverflow.com/questions/16568/how-to-select-the-nth-row-in-a-sql-database-table

```sql
SELECT * FROM (
  SELECT
    ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber,
    columns
  FROM tablename
) AS foo
WHERE rownumber <= n
0

A co wyróżnia akurat ten rekord ? (z jakiegoś powodu chcesz odwołać się właśnie do niego)

0

@aurel
Czyli rozumowanie moje dobre jest:) Dzianks

0
hipekk napisał(a):

A co wyróżnia akurat ten rekord ? (z jakiegoś powodu chcesz odwołać się właśnie do niego)

Pierwsza tabela to nr wszystkich bloków na osiedlu z adresami (id,nazwa ulicy). Druga natomiast to numery mieszkań w bloku (id,numer_bloku,nazwisko_lokatora,numer_lokalu) . Teraz muszę dodać w aplikacji lokal "kotłownia" do każdego bloku. Realizowane to być musi za pomocą jednego buttona. Aplikacja ma być uniwersalna tzn. nie znam pola numer_bloku oraz ich liczby.Nie znam żadnych id. Wiem tylko że tabele są powiązane za pomocą klucza id (tabela blok) -> numer_bloku (tabela lokal). Taki jest problem...rozwiązanie potwierdzone przez Aurel jest ok.
Zliczam ilość wierszy w tabeli Blok i w pętli wybieram te o określonej pozycji którą biorę z zapytania od Aurel. Jak znasz lepszy sposób to chętnie się nauczę od bardziej doświadczonego kolegi...zaranie startuję z .Net i jeszcze dużo przede mną.Dzięki za zainteresowanie tematem.

0

Rozumiem że spis tych kotłowni to ma być oddzielna tabelka tak ?

Do każdego bloku będzie przypisana oddzielna kotłownia ?

Zamierzasz od razu jakoś wypełnić informację o tych kotłowniach ?

0
  1. Nie oddzielna tabelka tylko następne pomieszczenie w tabeli z mieszkaniami
  2. Tak do każdego bloku osobna kotłownia
  3. Tak od razu uzupełniam wszystkie pola.
1

nie rozumiem

INSERT INTO mieszkania (numer_bloku, nazwisko_lokatora, numer_lokalu)
SELECT id, 'nazwisko', 'kotlownia' FROM bloki

wstawi kotłownię dla każdego bloku

praktycznie NIGDY nie ma sytuacji w której musisz pobierać wiersze z bazy danych po ich kolejności występowania - to zło w czystej postaci
załóżmy że między zapytaniem zwracającym Ci ilość bloków, inna osoba z innej instancji aplikacji doda dodatkowy blok i cała aplikacja Ci się posypie - to co myślałeś że będzie rekordem nr 2 będzie w rzeczywistości rekordem nr 3 - dane pokazywane w aplikacji nie będą się pokrywać z tymi które są w bazie danych

0

To po pierwsze nie ma nic wspólnego z .NET, bo to czysto bazodawnowy problem, po drugie wystarczy prosty insert z podzapytaniem albo joinem.
Po co tu pobierać jakąś kolejność rekordów? Zwłaszcza, że coś takiego jak kolejność rekordów w tabeli zwyczajnie NIE ISTNIEJE dopóki nie zdefiniujemy sortowania.

0
mkwiatek1989 napisał(a):
  1. Nie oddzielna tabelka tylko następne pomieszczenie w tabeli z mieszkaniami

Tego zupełnie nie rozumiem....
Skoro jeden blok = jedna kotłownia to czemu informacje o niej umieszczasz w tabeli z mieszkaniami ?

0
hipekk napisał(a):

Skoro jeden blok = jedna kotłownia to czemu informacje o niej umieszczasz w tabeli z mieszkaniami ?

bo kotłownia to tylko specjalny typ lokalu i będzie w tabeli z lokalami?

0

a samochód to specjalny typ pojazdu więc będzie w tabeli rowery?

0
gościu napisał(a):

a samochód to specjalny typ pojazdu więc będzie w tabeli rowery?

kotłownia to lokal w którym znajduje się kotłownia
czy mieszkanie pana Kowalskiego będzie w tabeli "lokale Kowalskiego" bo w środku znajduje się pan Kowalski?

Poza tym - średnia logika; raczej w tabeli "pojazdy" jak już i w zależności od założeń aplikacji to mogłoby mieć sens
Rozumiem że zamieszanie wprowadziła nazwa tabeli mieszkania w odpowiedzi upsssss? Autor wskazuje że tabela się nazywa lokal

0
uuuulala napisał(a):
gościu napisał(a):

a samochód to specjalny typ pojazdu więc będzie w tabeli rowery?

kotłownia to lokal w którym znajduje się kotłownia
czy mieszkanie pana Kowalskiego będzie w tabeli "lokale Kowalskiego" bo w środku znajduje się pan Kowalski?

Jaki lokator mieszka w kotłowni?
Co jeżeli będzie chciał przechowywać inrormację o ilości węgla w kotłowni?

1
gościu napisał(a):

Jaki lokator mieszka w kotłowni?

Dziwne pytania zadajesz

Wikipedia napisał(a)

Lokal to wydzielona część budynku służąca na cele mieszkaniowe lub inne (np. usługowe, produkcyjne, handlowe oraz użytkowe np. garaże).

Po co ktoś miałby mieszkać w kotłowni?

gościu napisał(a):

Co jeżeli będzie chciał przechowywać inrormację o ilości węgla w kotłowni?

Co jeżeli będzie chciał przechowywać informacje o posiadanych przez mieszkańców zwierząt? Co jeżeli w ogóle przestaną go interesować lokale? Co jeżeli będzie chciał przechowywać coś całkowicie innego? Na te i inne pytania odpowiedź znajdziemy w kolejnym odcinku

1

Druga natomiast to numery mieszkań w bloku (id,numer_bloku,nazwisko_lokatora,numer_lokalu)

0
upsssss napisał(a):

nie rozumiem

INSERT INTO mieszkania (numer_bloku, nazwisko_lokatora, numer_lokalu)
SELECT id, 'nazwisko', 'kotlownia' FROM bloki

wstawi kotłownię dla każdego bloku

praktycznie NIGDY nie ma sytuacji w której musisz pobierać wiersze z bazy danych po ich kolejności występowania - to zło w czystej postaci
załóżmy że między zapytaniem zwracającym Ci ilość bloków, inna osoba z innej instancji aplikacji doda dodatkowy blok i cała aplikacja Ci się posypie - to co myślałeś że będzie rekordem nr 2 będzie w rzeczywistości rekordem nr 3 - dane pokazywane w aplikacji nie będą się pokrywać z tymi które są w bazie danych

Kolega ma rację wystarczy tak...dużo prościej i szybciej. Ma to związek z .Net bo w tym buduję aplikację...dzięki za pomoc..temat chyba wyczerpany dogłębnie!!

0

To z czego wywołasz zapytanie to mało istotne.
Jeżeli zrobisz to w ten sposób jak upsssss zaproponował to nie wykorzystasz żadnej "funkcjonalności" .net (np jakiejś pętli czy coś takiego), więc nie ma to związku z tą technologią :).

No i proponuje dokładną lekturę wszystkich odpowiedzi, bo prawdopodonie źle projektujesz bazę danych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1