Hier sind meine beiden Tabellen Struktur,SQL Join zwischen zwei Tabellen
mysql> desc catalog_product_entity;
+------------------+----------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+----------------------+------+-----+---------------------+----------------+
| entity_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| entity_type_id | smallint(8) unsigned | NO | MUL | 0 | |
| attribute_set_id | smallint(5) unsigned | NO | MUL | 0 | |
| type_id | varchar(32) | NO | | simple | |
| sku | varchar(64) | YES | MUL | NULL | |
| created_at | datetime | NO | | 0000-00-00 00:00:00 | |
| updated_at | datetime | NO | | 0000-00-00 00:00:00 | |
| has_options | smallint(1) | NO | | 0 | |
| required_options | tinyint(1) unsigned | NO | | 0 | |
| user_id | mediumint(11) | NO | | NULL | |
+------------------+----------------------+------+-----+---------------------+----------------+
10 rows in set (0.00 sec)
mysql> desc catalog_product_entity_varchar;
+----------------+-----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+-----------------------+------+-----+---------+----------------+
| value_id | int(11) | NO | PRI | NULL | auto_increment |
| entity_type_id | mediumint(8) unsigned | NO | | 0 | |
| attribute_id | smallint(5) unsigned | NO | MUL | 0 | |
| store_id | smallint(5) unsigned | NO | MUL | 0 | |
| entity_id | int(10) unsigned | NO | MUL | 0 | |
| value | varchar(255) | NO | | | |
+----------------+-----------------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)
ich zwei Tabellen anschließen möchten, basierend auf folgenden Kriterien
ich alle Werte bilden Tabelle an zweiter Stelle holen wollen catalog_product_entity_varchar
wo ENTITY_ID sollte Übereinstimmung mit der ersten Tabelle catalog_product_entity
und wobei user_id aus der ersten Tabelle 12
ist.
Unten ist meine SQL-Abfrage -
select entity_id, value, COUNT(*) as count
from catalog_product_entity_varchar as cpev
INNER JOIN catalog_product_entity as cpe on cpe.entity_id = cpev.entity_id
where attribute_id = '960'
GROUP BY value
HAVING (COUNT(*) > 1)
limit 1
Updates -
ich meine SQL-Abfrage aktualisiert habe, Aber es zeigt nur ein Ergebnis nicht mehr Ergebnisse.
select catalog_product_entity_varchar.entity_id,
catalog_product_entity_varchar.value, COUNT(*) as count,
catalog_product_entity.entity_id, catalog_product_entity.user_id
from catalog_product_entity_varchar,
catalog_product_entity
where attribute_id = '960'
and catalog_product_entity_varchar.entity_id = catalog_product_entity.entity_id
AND catalog_product_entity.user_id = '12'
GROUP BY value
HAVING (COUNT(*) > 1)
limit 1;
Aktuell Ergebnis -
+-----------+---------------+-------+-----------+---------+
| entity_id | value | count | entity_id | user_id |
+-----------+---------------+-------+-----------+---------+
| 11062505 | 05-04100262-R | 2 | 11062505 | 12 |
+-----------+---------------+-------+-----------+---------+
1 row in set (36.67 sec)
Erwartetes Ergebnis -
+-----------+----------------+--------------+----------+-----------+---------------+
| value_id | entity_type_id | attribute_id | store_id | entity_id | value |
+-----------+----------------+--------------+----------+-----------+---------------+
| 63606647 | 10 | 960 | 0 | 11062505 | 05-04100262-R |
| 149826537 | 10 | 960 | 0 | 19987372 | 05-04100262-R |
+-----------+----------------+--------------+----------+-----------+---------------+
2 rows in set (12.84 sec)
Und auch wir können optimieren diese Abfrage, weil aktuelle Abfrage wird zu viel Zeit
Sie erklären, was mit der Abfrage falsch ist, was es im Gegensatz gibt, wie es sollte sein. –
Könnten Sie Ihre Absicht deutlich machen? Wo ist die Bedingung "user_id" in Ihrer Anfrage "12"? Und andere Bedingungen in Ihrer Abfrage stimmen nicht mit der Absicht überein, die Sie zuvor beschrieben haben? –
Sie machen ein GROUP BY in der Spalte Wert, aber bringen auch die Spalte entity_id zurück. Welcher Wert von entity_id für einen Wert zurückgegeben wird, ist nicht definiert. – Kickstart