Что я должен сделать, чтобы отобразить все данные из 2 или более разных таблиц, я пытаюсь использовать JOIN, но я все еще не понимаю?

Альтернативное решение для Черепахи и Кролика, не совсем так приятно, поскольку я временно меняю список:

Идея состоит в том, чтобы ходить по списку и отменить его, когда вы идете. Затем, когда вы впервые достигнете узла, который уже был посещен, его следующий указатель будет указывать «назад», в результате чего итерация снова начнется к first, где она завершается.

Node prev = null;
Node cur = first;
while (cur != null) {
    Node next = cur.next;
    cur.next = prev;
    prev = cur;
    cur = next;
}
boolean hasCycle = prev == first && first != null && first.next != null;

// reconstruct the list
cur = prev;
prev = null;
while (cur != null) {
    Node next = cur.next;
    cur.next = prev;
    prev = cur;
    cur = next;
}

return hasCycle;

Тестовый код :

static void assertSameOrder(Node[] nodes) {
    for (int i = 0; i < nodes.length - 1; i++) {
        assert nodes[i].next == nodes[i + 1];
    }
}

public static void main(String[] args) {
    Node[] nodes = new Node[100];
    for (int i = 0; i < nodes.length; i++) {
        nodes[i] = new Node();
    }
    for (int i = 0; i < nodes.length - 1; i++) {
        nodes[i].next = nodes[i + 1];
    }
    Node first = nodes[0];
    Node max = nodes[nodes.length - 1];

    max.next = null;
    assert !hasCycle(first);
    assertSameOrder(nodes);
    max.next = first;
    assert hasCycle(first);
    assertSameOrder(nodes);
    max.next = max;
    assert hasCycle(first);
    assertSameOrder(nodes);
    max.next = nodes[50];
    assert hasCycle(first);
    assertSameOrder(nodes);
}
0
задан Ricky Guinta 17 January 2019 в 07:47
поделиться

1 ответ

Один из способов, которым вы могли бы соединить эти 2 таблицы и отобразить все данные в них с помощью JOIN, выглядит следующим образом:

SELECT table1.*, table2.* FROM data_skm_organisasi AS table1
LEFT JOIN data_skm_kejuaraan AS table2 ON table1.namaKegiatan = table2.namaKegiatan AND table1.namaMahasiswa AND table2.namaMahasiswa
ORDER BY table1.id ASC

Это вернет все данные в этих 2 таблицах, которые имеют одинаковые значения для namaMahasiswa и namaKegiatan.

Обратите внимание: если вы используете table1.* и table2.*, вы не сможете получить доступ ко всем данным, так как столбцы будут иметь одно и то же имя, поэтому это ] рекомендовано всегда указывать все поля, которые необходимо вернуть, и использовать aliases для полей с одинаковыми именами в обеих таблицах.

Пр. SELECT table1.tingkatan, table2.tingkata AS tingkata2 ....

Но вам действительно следует подумать о добавлении какого-либо условия WHERE к вашему запросу, чтобы не тратить много времени на загрузку данных, если у вас слишком много записей.

П.С. Это моя лучшая оценка структуры вашей таблицы, так как у вас нет правильной настройки отношений для этих таблиц

0
ответ дан Igor Ilic 17 January 2019 в 07:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: