2017-10-01 4 views
0

Nur eine kleine Frage, wenn ich eine Datenbank hatte, die SQL verwendet wurde:Wie findet man den gemeinsamen Wert zwischen Datensätzen in SQL?

Gibt es
Names: Max¦ John¦ May¦ Olivia 

Numbers: 3, 7, 9¦ 1, 3, 4¦ 8, 5, 3¦ 5, 7, 1 

einen Weg, SQL die „Zahlen“ Spalt zu überprüfen, um ihre zu sehen, wie viele Leute wie die Nummer 5 und dann zeigen Name, wer wie die Nummer, an den Benutzer.

+2

* Niemals * Listen von Zahlen als durch Kommas getrennte Strings speichern. Es ist so falsch, Daten auf diese Weise zu speichern. Repariere deine Datenbank. –

+1

Ja, da ist. Um eine detailliertere Antwort zu erhalten, müssen Sie Ihre Frage bearbeiten und die Beziehung zwischen Namen und Zahlen angeben und angeben, welche Personen welche Zahlen mögen. – jhenderson2099

Antwort

1

Nun, zuerst Sie eine schlechte Datenbank-Design haben, aber wenn Sie immer noch auf ihn bewegen wollen, ist, wie es geht:

SELECT * 
FROM YourTableName 
WHERE Numbers LIKE '%5%'; 

Ergebnis :

+--------+---------+ 
| Name | Numbers | 
+--------+---------+ 
| May | 8, 5, 3 | 
| Olivia | 5, 7, 1 | 
+--------+---------+ 

Aber ich empfehlen wie das Design zu somthing zu ändern:

DECLARE @Names TABLE (ID INT IDENTITY(1,1), Name VARCHAR(30)); 
DECLARE @Numbers TABLE (Name INT, Number INT); 

INSERT INTO @Names VALUES 
('Max'), 
('John'), 
('May'), 
('Olivia'); 
INSERT INTO @Numbers VALUES 
(1, 3), 
(1, 7), 
(1, 9), 
(2, 1), 
(2, 3), 
(2, 4), 
(3, 8), 
(3, 5), 
(3, 3), 
(4, 5), 
(4, 7), 
(4, 1); 
/**/ 
SELECT N.Name, NM.Number 
FROM @Names N INNER JOIN @Numbers NM ON N.ID = NM.Name 
WHERE NM.Number = 5; 

Ergebnis:

+--------+--------+ 
| Name | Number | 
+--------+--------+ 
| May |  5 | 
| Olivia |  5 | 
+--------+--------+ 

Demo1

Demo2

auch hier mit einem guten article ist zu starten.

0

Hier sind einige Gründe, keine Zahlen zu speichern, in einer Zeichenkette:

  • SQL hat eine große Datenstruktur für Listen zu speichern. Es heißt Tabelle, keine Zeichenfolge.
  • SQL hat (relativ) miese String-Verarbeitungsmöglichkeiten.
  • Abfragen, die Filter für Zeichenfolgen verwenden, können im Allgemeinen keine Indizes verwenden.
  • Die Zahlen sollten im entsprechenden Datentyp gespeichert werden - das ist eine Zahl, keine Zeichenfolge.
  • Wenn die Zahlen IDs in einer anderen Tabelle sind, können Sie keine Fremdschlüsselbeziehungen deklarieren.

Wenn Sie wollen einfach nur „5“ in einer Zeichenfolge finden, können Sie like verwenden:

where numbers like '%5%' 

dies wahrscheinlich nicht tun, was Sie wollen, weil es „5“ entsprechen zu " 15". Obwohl dies behoben werden kann, gehen Sie zurück und verstehen Sie, warum Sie die Daten nicht auf diese Weise speichern sollten. Stattdessen möchten Sie eine Tabelle wie:

Name Number 
Max  3 
Max  7 
Max  9 
John  1 
. . . 
+0

Das ist also die Datenbank: Name: Nummer Max: 3, 7, 9 John: 1, 3, 4 Mai: 8, 5, 3 Olivia: 5, 7, 1 Was muss ich Wissen Sie, wie finden Sie die gemeinsame Nummer zwischen den Datensätzen? Es tut mir leid, wenn ich das vorher nicht klar gemacht habe. –

Verwandte Themen